Управлять что выходы с нулевым состоянием (не/bin/true)?

У меня есть Make-файл, который выполняет инструмент, который берет некоторое время; это позволяет мне заменять используемую команду:

make TOOL=alternative-tool

Я хотел бы пропустить тот шаг в Make-файле, таким образом, я ищу команду, которая выходит с состоянием 0, и это имеет незначительные побочные эффекты.

Очевидно, я мог просто использовать true, но это довольно сбивает с толку:

make TOOL=true

Это читает, как будто я хочу выполнить инструмент, но я не делаю.

Есть ли установленный на значении по умолчанию исполняемый файл, который не является /bin/true это выходит с состоянием 0, и это имеет броское и легкое к имени типа?

11
задан 20 April 2018 в 11:15

5 ответов

Даже при том, что Вы попросили что-то, что является "нет /bin/true", замена true с полным именем /bin/true показать, что это true программа, а не некоторое другое значение "истинных" является, вероятно, лучшим решением.

Ваше беспокойство то, что true в

make TOOL=true

кажется, что-то другое, чем название команды. Но если Вы пишете

make TOOL=/bin/true

затем это - однозначно команда. Кто-то мог бы неправильно читать TOOL=true означать, что некоторый другой инструмент где-нибудь предназначается, но никакое такое неправильное чтение TOOL=/bin/true вероятно.


Я не уверен относительно когда :, то, которое является встроенной оболочкой, но не внешняя команда, будет работать. Henning Makholm сообщил, что это, кажется, работает. Но я думаю, что это не работает во всех ситуациях, и Вы нашли, что это не работало на Вас.

Что касается псевдонима оболочки, Вы не можете использовать это, потому что расширение псевдонима не выполняется в аргументах, которые Вы передаете команде, и при этом make-файлы не делают использования ранее определенных псевдонимов оболочки. Даже если make выполняет Ваши команды в новой оболочке, та оболочка не будет иметь псевдонима (и не использовал бы его, даже если бы это действительно имело его, потому что это была бы неинтерактивная оболочка, где расширение псевдонима автоматически не включено).

42
ответ дан 23 November 2019 в 03:49

В то время как я соглашаюсь что с помощью полного пути для true было бы лучшее решение, я хотел бы отметить то, что является, вероятно, безусловно наиболее распространенным способом избежать реального выполнения команды: липкий echo перед ним. Так:

make TOOL=echo
7
ответ дан 23 November 2019 в 03:49

Можно всегда делать собственную команду, которая действительно только возвращает нулевой статус выхода. Некоторые опции:

  • соответственно именованная символьная ссылка на /bin/true

  • пустой сценарий оболочки

  • почти пустая программа C:

    int main() {
        return 0;
    }
    
5
ответ дан 23 November 2019 в 03:49

Создайте символьную ссылку в рабочем каталоге к/bin/true, названному чем-то как skip. Таким образом...

skip -> /bin/true

Затем сделать строка может быть...

make TOOL=./skip
0
ответ дан 23 November 2019 в 03:49

Вот способ сделать это с немного большим количеством символов:

function T() { /bin/true; }

После выполнения этого, после того как можно повторно выполнить его только при помощи имени T.

false; T; echo $?
-2
ответ дан 23 November 2019 в 03:49

Другие вопросы по тегам:

Похожие вопросы: