Как я могу объединить несколько команд в одну строку, но при этом запустить их все в фоновом режиме? Это не сработало:
sleep 1m & && echo "goodbye" & && exit &.
sleep 1m & ; echo "goodbye" & ; exit &.
sleep 1m & echo "goodbye" & exit &.
У меня должны быть все команды для выполнения сеанса переднего плана . Например, exit &
должны завершить сеанс переднего плана.
Примечание: я использую его как альтернативу утилите at
. История того, почему мне нужна эта альтернатива, длинна, но ее можно понять из этих вопросов, которые я задал здесь (и представленных в хронологическом порядке ниже), но, к сожалению, у меня не было удовлетворительного решения (относительно моего конкретного случая):
Здесь ответ от dataved кажется многообещающим.
Как насчет
pid=$$; ( sleep 1; echo goodbye; kill $pid ) & echo hello
Ну, ИМО, лучший способ сделать это и избавить от проблем - использовать утилиту 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>
&&
является условным оператором. Он выполнит команду справа, если и только если команда слева успешно завершилась. Поскольку вы выполняете команду слева в фоновом режиме, ее код возврата не может быть определен, и все ломается и не работает должным образом.
Не используйте &
. Вы должны либо выполнить command1 & command2 & command3
, либо ( command1; command2; command3 )&
. Второй будет выполнять все команды последовательно в подоболочке, которая выполняется в фоновом режиме.