Как я объединяю команды в цепочку на консоли?

В bash, Я иногда хочу выполнить несколько команд в сериале и не хочу ожидать их для окончания, прежде чем я введу новые. Таким образом, я делаю что-то вроде этого:

cmd1; cmd2; cmd3

К сожалению, одна из команд могла бы перестать работать. В этом случае я хотел бы остановиться. Существует ли простой способ сделать это, но сделать его так, чтобы я только продолжал управлять командами, если предыдущая команда имела 0 кодов выхода?

23
задан 20.01.2011, 20:58

2 ответа

Использовать && оператор,

cmd1 && cmd2 && cmd3

В shellscripting, && и || операторы смоделированы после оптимизированной реализации логических операторов в C. && операция И средств, и || средства ИЛИ. Unix плотно связан с C, и в C, второй операнд логических операторов не оценен, если результат уже известен от первого операнда. Например. "false && x" false для любого x, таким образом, нет никакой потребности оценить x (особенно, если x вызов функции); так же для "true || x". Это также называют, закорачивая семантику.

И в Unix, традиционно интерпретировать возвращаемые значения команд как "успешное завершение" значения истинности: средства кода выхода 0 true (успех), ненулевые средства false (отказ). Так, когда первая команда в cmd1 && cmd2 возвраты "false" (ненулевой статус выхода, который указывает на отказ), состояние составной команды известно: отказ. Таким образом, полная интерпретация cmd1 && cmd2 может быть: "выполнитесь cmd1, И ЗАТЕМ если это не перестало работать, cmd2". Который является тем, что Вы в основном хотите в своем вопросе.

Так же с ИЛИ: cmd1 || cmd2 может быть интерпретирован, поскольку "выполняются cmd1, ИЛИ ЕСЛИ это перестало работать, cmd2".


Проподсказка: для более длинных цепочек &&, рассмотрите помещение set -e в Вашем сценарии. Это в основном изменяет точку с запятой ; в &&, с несколькими особыми случаями.

39
ответ дан 07.12.2019, 09:48

Просто с && оператор. Например:

cmd1 && cmd2 && cmd3

Если один из сбоев команд (возвращает значение выхода кроме 0), другие команды не будет работать.

6
ответ дан 07.12.2019, 09:48

Теги

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