Я понимаю, что в программировании bash comamnd1;command2;command3
будет запускать их последовательно, а command1&&command2&&command3
будет запускать их параллельно. Однако, что происходит, когда я объединяюсь ;
и &&
вместе, например command1 ; command2 && command 3
?
Каков приоритет между ;
и &&
в bash? Указанная выше команда эквивалентна (command1;commmand2) && command3
или to (command1);(command2 && command3)
1 ответ
Первое: чтобы запустить команду в фоновом режиме, вы набираете ее, а затем одиночный &
, двойной &&
является логическим и оператором (а также ||
логическим или).
Выполнение command1 && command2
возвращает логическое значение true (т. Е. Код возврата 0, что означает "без ошибок"), если обе команды возвращаются без ошибок.
Как часто используемый побочный эффект, команда2 не выполняется, когда команда 1 возвратила ошибку, поскольку результат логической операции и операции не может привести к истине, если первый аргумент уже известен как ложный.
command1 ; command2 & command3
Команды выполняются слева направо: первый command1
запускается, ждали , пока он не закончит, а затем command2
работать в фоновом режиме (как это следует &
и сразу же с последующим command3
Вы можете использовать фигурные скобки для запуска последовательности команд в фоновом режиме, например:
{ command1 ; command2 ; } & command3