Если бы я хотел запустить две отдельные команды в одной строке, я мог бы сделать это:
cd /home; ls -al
или это:
cd /home && ls -al
И я получаю те же результаты. Однако что происходит в фоновом режиме с этими двумя методами? В чем функциональная разница между ними?
;
действительно опасно (по крайней мере, с помощью команды rm)cd /some/dir; rm -fr ./*
. Таким образом, при такой разрушительной операции вы должны быть уверены, что находитесь в нужном месте, прежде чем выполнять команду rm. Правильная командаcd /some/dir && rm -fr ./*
если a возвращает нулевой код выхода, то выполняется b .
если a возвращает ненулевой код выхода, то выполняется b .
а выполняется, а затем б выполняется.
источник
Запускается
ls
в текущем каталоге, потому чтоcd /fakedir
произойдет сбой, и оболочка будет игнорировать состояние выхода, которое не равно нулю.Поскольку
&&
оператор продолжит работу, только если предыдущая команда завершилась нормально (нулевое состояние), никакиеls
операции выполняться не будут.Существуют и другие операторы, например,
&
которые будут задавать фон процесса. Хотя оно часто помещается в конце команды, оно может быть помещено в середину цепочки.источник
Вы также можете объединить их вместе, как
if..then..else
для объединения логики команд.пример:
источник