Чтобы разделить обычные команды в Unix, нужно поставить точку с запятой в конце следующим образом:
cd /path/to/file;./someExecutable;
Но, похоже, это не работает для таких команд:
./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;
Есть ли способ разделить такие команды?
Кроме того, если меньше 2 случаев, эквивалентны ли я копирую вставку в командную строку? Спасибо.
cd /path/to/file;./someExecutable;
cd /path/to/file;
./someExecutable;
command1 & command2
Выполнит command1
, отправьте процесс в фоновый режим и немедленно начните выполнение command2
, даже если command1
не завершено.
command1 ; command2
Выполнит command1
а затем выполнить command2
один раз command1
отделки, независимо от того, command1
вышел успешно.
command1 && command2
будет только выполнять command2
один раз command1
успешно завершил выполнение. Если command1
терпит неудачу, command2
не будет выполняться.
(... также для полноты ...)
command1 || command2
будет только выполнять command2
если command1
терпит неудачу (завершается с ненулевым кодом выхода.)
Хорошо ";" заставляет оболочку ждать завершения команды, а затем переходит к следующей команде.
Символ «&» отправит любой процесс прямо в фоновый режим и продолжит выполнение следующей команды - независимо от того, завершилась ли первая команда или все еще выполняется.
Так "&;" не будет работать так, как вы ожидаете.
Но на самом деле я не уверен, чего вы ожидаете.
Попробуйте это в своей оболочке:
sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3
он выведет: 2 1 3
Теперь сравните это с
sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3
который выведет 1 2 3
С уважением.