Запустить команду в фоновом режиме, но также объединить с ней другие команды?

Как я могу объединить несколько команд в одну строку, но при этом запустить их все в фоновом режиме? Это не сработало:

sleep 1m & && echo "goodbye" & && exit &.
sleep 1m & ; echo "goodbye" & ; exit &.
sleep 1m & echo "goodbye" & exit &.

У меня должны быть все команды для выполнения сеанса переднего плана . Например, exit & должны завершить сеанс переднего плана.

Примечание: я использую его как альтернативу утилите at . История того, почему мне нужна эта альтернатива, длинна, но ее можно понять из этих вопросов, которые я задал здесь (и представленных в хронологическом порядке ниже), но, к сожалению, у меня не было удовлетворительного решения (относительно моего конкретного случая):

Здесь ответ от dataved кажется многообещающим.

0
13.04.2017, 15:36
3 ответа

Как насчет

pid=$$; ( sleep 1; echo goodbye; kill $pid ) & echo hello
1
28.01.2020, 02:34

Ну, ИМО, лучший способ сделать это и избавить от проблем - использовать утилиту screen:

1. screen -R <name-of-the-screen-session>
2. <the-command(s)> 
3. ctrl + a + d ### To exit the screen session
4. To log back: screen -x <name-of-the-screen-session>
1
28.01.2020, 02:34

&& является условным оператором. Он выполнит команду справа, если и только если команда слева успешно завершилась. Поскольку вы выполняете команду слева в фоновом режиме, ее код возврата не может быть определен, и все ломается и не работает должным образом.

Не используйте &. Вы должны либо выполнить command1 & command2 & command3, либо ( command1; command2; command3 )&. Второй будет выполнять все команды последовательно в подоболочке, которая выполняется в фоновом режиме.

0
28.01.2020, 02:34

Теги

Похожие вопросы