Команда, которая выходит с нулевым статусом (not / bin / true)?

Если вы определили AltGr в качестве ключа компоновки, его первоначальное поведение переопределено.

Чтобы отключить ключ компоновки и с сохранением исходного поведения AltGr , вы может использовать Tweaks (gnome-tweak-tool) или запустить эту команду терминала:

gsettings reset org.gnome.desktop.input-sources xkb-options
11
задан 20 April 2018 в 21:15

15 ответов

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

Ваша забота о том, что true в

make TOOL=true

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

make TOOL=/bin/true

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

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

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

42
ответ дан 22 May 2018 в 11:21
  • 1
    Использование :, похоже, отлично работает для меня. make всегда порождает оболочку для запуска каждой команды после выполнения ее собственных подстановок. – Henning Makholm 19 April 2018 в 15:49
  • 2
    @HenningMakholm Спасибо, я отредактировал. Вы можете отправить ответ. Lok Lam Cheng прокомментировал вопрос о вопросе , чтобы предложить :, но это должен быть ответ (особенно если правильный), и этот комментарий не объясняет, почему следует ожидать это работать. В каталоге с hello.c и без makefile, где make hello компилирует hello.c в hello, я обнаружил, что make CC=: hello вел себя в соответствии с тем, что вы говорите. – Eliah Kagan 19 April 2018 в 16:04
  • 3
    К сожалению, для этого конкретного Makefile (он использует erlang.mk ), использование : не работает. Быть явным о /bin/true, вероятно, является лучшим способом сделать это. – Roger Lipscombe 19 April 2018 в 17:22

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

Ваша забота о том, что true в

make TOOL=true

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

make TOOL=/bin/true

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

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

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

42
ответ дан 17 July 2018 в 16:33

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

Ваша забота о том, что true в

make TOOL=true

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

make TOOL=/bin/true

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

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

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

42
ответ дан 23 July 2018 в 17:25

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

make TOOL=echo
9
ответ дан 22 May 2018 в 11:21
  • 1
    Я думаю, что это иногда полезно, когда важно помнить, что кто-то подавил любое действие TOOL в противном случае. Без -s или эквивалента make испускает избыточную информацию, поскольку обе команды make и echo, выполняемые make, выделяют отдельно. Например, когда я запускаю make CC=echo hello в директории с hello.c и никаким make-файлом, я получаю echo hello.c -o hello в качестве первой строки вывода, а hello.c -o hello - второй. Но некоторые сборки используют (или пользователь может добавить) -s, а затем это полезно. make -s CC=echo hello дает только hello.c -o hello. – Eliah Kagan 19 April 2018 в 18:23
  • 2
    (что может быть полезно, если команды связаны с расширением оболочки, поэтому вы можете получить более четкое представление о том, что выполняется, если это интересно) – muru 19 April 2018 в 18:57

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

обозначили соответствующую символическую ссылку на /bin/true пустым сценарием оболочки почти пустую C-программу:
int main() {
    return 0;
}
6
ответ дан 22 May 2018 в 11:21
  • 1
    Хорошим именем для такой программы будет noop или no-op. – arp 21 April 2018 в 01:15

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

skip -> /bin/true

Тогда строка make может быть ...

make TOOL=./skip
0
ответ дан 22 May 2018 в 11:21

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

function T() { /bin/true; }

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

[F2]
-2
ответ дан 22 May 2018 в 11:21
  • 1
    Не могли бы вы объяснить, как эта функция может быть вызвана из значения переменной Make (для использования в рассматриваемой ситуации)? – David Foerster 21 April 2018 в 01:17

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

обозначили соответствующую символическую ссылку на /bin/true пустым сценарием оболочки почти пустую C-программу: int main() { return 0; }
6
ответ дан 17 July 2018 в 16:33

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

skip -> /bin/true

Тогда строка make может быть ...

make TOOL=./skip
0
ответ дан 17 July 2018 в 16:33

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

make TOOL=echo
9
ответ дан 17 July 2018 в 16:33

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

function T() { /bin/true; }

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

[F2]
-2
ответ дан 17 July 2018 в 16:33

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

обозначили соответствующую символическую ссылку на /bin/true пустым сценарием оболочки почти пустую C-программу: int main() { return 0; }
6
ответ дан 23 July 2018 в 17:25
  • 1
    Хорошим именем для такой программы будет noop или no-op. – arp 21 April 2018 в 01:15

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

skip -> /bin/true

Тогда строка make может быть ...

make TOOL=./skip
0
ответ дан 23 July 2018 в 17:25

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

make TOOL=echo
9
ответ дан 23 July 2018 в 17:25
  • 1
    Я думаю, что это иногда полезно, когда важно помнить, что кто-то подавил любое действие TOOL в противном случае. Без -s или эквивалента make испускает избыточную информацию, поскольку обе команды make и echo, выполняемые make, выделяют отдельно. Например, когда я запускаю make CC=echo hello в директории с hello.c и никаким make-файлом, я получаю echo hello.c -o hello в качестве первой строки вывода, а hello.c -o hello - второй. Но некоторые сборки используют (или пользователь может добавить) -s, а затем это полезно. make -s CC=echo hello дает только hello.c -o hello. – Eliah Kagan 19 April 2018 в 18:23
  • 2
    (что может быть полезно, если команды связаны с расширением оболочки, поэтому вы можете получить более четкое представление о том, что выполняется, если это интересно) – muru 19 April 2018 в 18:57

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

function T() { /bin/true; }

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

[F2]
-2
ответ дан 23 July 2018 в 17:25
  • 1
    Не могли бы вы объяснить, как эта функция может быть вызвана из значения переменной Make (для использования в рассматриваемой ситуации)? – David Foerster 21 April 2018 в 01:17

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

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