Назад | Перейти на главную страницу

Unix разделяет несколько команд, у которых в конце есть '&' (выполнение в фоновом режиме)

Чтобы разделить обычные команды в 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

С уважением.