В учебниках и практических занятиях я часто вижу комбинированные команды. Например,
sudo apt-get update && sudo apt-get install pyrenamer
Там , кажется, четыре возможных разъемов: &
, &&
, ||
и ;
. Хотя &
разъем для меня понятен (он отправляет процесс в фоновый режим и оставляет терминал доступным), не ясно, в чем разница между &&
и ;
. И я не знал, ||
пока Кая комментарий.
Следующие вопросы касаются разницы между двумя разъемами, но в основном это делается в комментариях:
Итак, вот несколько связанных вопросов:
- В чем разница между
;
и&&
? - Когда вы должны использовать их соответственно? Было бы неплохо увидеть некоторые варианты использования: если я хочу выполнить команду, а затем после ее выключения мой компьютер, какой разъем выбрать?
- Каковы их преимущества и опасности ? Роби Басак упоминает в комментарии к этому ответу, что подобная команда
cd /somewhere_else; rm -Rf *
может иметь разрушительные последствия, например, в случае сбоя первого элемента в цепочке команд. - Если уместно, откуда они берутся?
command-line
bash
don.joey
источник
источник
||
он такой же, как и&&
тот, за исключением того, что он выполняет вторую команду только в том случае, если первая вышла с ненулевым (неудачным) состоянием.set -e
остановит скрипт при сбое, как если бы все команды были связаны&&
.Ответы:
Cheatsheet:
источник
A & B &
,: запустите A в фоновом режиме, затем запустите B в фоновом режиме (независимо от успеха) и верните управление оболочке. Это часто работает примерно так же, как и запуск обоих процессов одновременно.(A && B) &
.&&
запускает вторую команду только в том случае, если первая вышла со статусом 0 (была успешной).;
запускает обе команды, даже если первая выходит с ненулевым статусом.Ваш пример с
&&
может быть эквивалентно перефразирован какисточник
;
если вторая команда не нуждается в предыдущей для успеха.Использование
;
выполнит команды независимо от того, успешна ли первая команда или нет.использовать
&&
команду «Выполнить 2-ю команду» только в случае успешного выполнения первой команды (статус 0)Оба используются с разных точек зрения. Как для более длительного процесса, скажем, для установки вам нужно скомпилировать и установить его. ты должен
make && make install
. Таким образом, установка будет выполняться только в случаеmake
успеха.Так что для зависимых команд вы должны использовать
&&
Wring bash или команды с независимыми командами
;
Поэтому, если вы хотите выключить компьютер, даже если первое задание не удалось использовать
;
, но если вы хотите, чтобы первое задание было завершено успешно, запустите отключение.&&
источник
a ; b
будет работать b независимо от состояния выхода a.a && b
будет работать только в случае успеха.Это необходимо и достаточно, чтобы ответить на первые 3 вопроса. В частности, цифра 2 слишком широка, и на нее нельзя дать однозначный однозначный ответ - лучше всего выбирать для каждого конкретного случая.
Что касается 4-го вопроса: это синтаксис Bash .
Там нет никакой внутренней опасности в использовании либо. Опять же, приведенного выше определения достаточно. Это означает, что вы будете писать,
&&
когдаb
имеет непредвиденные последствия, еслиa
не удастся. Нет необходимости в дополнительных правилах или объяснениях, ИМХО.источник
Очень хорошее эмпирическое правило. Я бы добавил, что в некоторых случаях использование этих команд в подоболочке имеет смысл, когда мы хотим рассматривать их как единое целое или не хотим связывать некоторые результаты операций с текущей оболочкой.
Примеры:
-связать вывод двух команд:
-входя в каталог и выполняя команду оттуда, не меняя текущий каталог оболочки:
источник