У меня есть Make-файл, который выполняет инструмент, который берет некоторое время; это позволяет мне заменять используемую команду:
make TOOL=alternative-tool
Я хотел бы пропустить тот шаг в Make-файле, таким образом, я ищу команду, которая выходит с состоянием 0, и это имеет незначительные побочные эффекты.
Очевидно, я мог просто использовать true
, но это довольно сбивает с толку:
make TOOL=true
Это читает, как будто я хочу выполнить инструмент, но я не делаю.
Есть ли установленный на значении по умолчанию исполняемый файл, который не является /bin/true
это выходит с состоянием 0, и это имеет броское и легкое к имени типа?
Даже при том, что Вы попросили что-то, что является "нет /bin/true
", замена true
с полным именем /bin/true
показать, что это true
программа, а не некоторое другое значение "истинных" является, вероятно, лучшим решением.
Ваше беспокойство то, что true
в
make TOOL=true
кажется, что-то другое, чем название команды. Но если Вы пишете
make TOOL=/bin/true
затем это - однозначно команда. Кто-то мог бы неправильно читать TOOL=true
означать, что некоторый другой инструмент где-нибудь предназначается, но никакое такое неправильное чтение TOOL=/bin/true
вероятно.
Я не уверен относительно когда :
, то, которое является встроенной оболочкой, но не внешняя команда, будет работать. Henning Makholm сообщил, что это, кажется, работает. Но я думаю, что это не работает во всех ситуациях, и Вы нашли, что это не работало на Вас.
Что касается псевдонима оболочки, Вы не можете использовать это, потому что расширение псевдонима не выполняется в аргументах, которые Вы передаете команде, и при этом make-файлы не делают использования ранее определенных псевдонимов оболочки. Даже если make
выполняет Ваши команды в новой оболочке, та оболочка не будет иметь псевдонима (и не использовал бы его, даже если бы это действительно имело его, потому что это была бы неинтерактивная оболочка, где расширение псевдонима автоматически не включено).
В то время как я соглашаюсь что с помощью полного пути для true
было бы лучшее решение, я хотел бы отметить то, что является, вероятно, безусловно наиболее распространенным способом избежать реального выполнения команды: липкий echo
перед ним. Так:
make TOOL=echo
Можно всегда делать собственную команду, которая действительно только возвращает нулевой статус выхода. Некоторые опции:
соответственно именованная символьная ссылка на /bin/true
пустой сценарий оболочки
почти пустая программа C:
int main() {
return 0;
}
Создайте символьную ссылку в рабочем каталоге к/bin/true, названному чем-то как skip
. Таким образом...
skip -> /bin/true
Затем сделать строка может быть...
make TOOL=./skip
Вот способ сделать это с немного большим количеством символов:
function T() { /bin/true; }
После выполнения этого, после того как можно повторно выполнить его только при помощи имени T
.
false; T; echo $?