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