nohup несколько последовательных команд

nohup несколько последовательных команд

Мне нужно nohupдве команды, одна за другой. Вторая команда должна быть выполнена ПОСЛЕ первой команды. Вот команды:

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz

Мне нужно, чтобы команды работали в фоновом режиме, но, очевидно, не обе одновременно. Вторая команда должна быть запущена после завершения первой. Я попробовал это:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

но команды не запускаются в фоновом режиме. Приглашение bash ждет, пока две команды не будут выполнены, прежде чем выдать мне еще одно приглашение. Мне нужно, чтобы они работали в фоновом режиме.

Если я сделаю:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &

Это прекрасно работает в фоновом режиме. Это происходит только тогда, когда я пытаюсь выполнить больше одной команды.

Я также попробовал:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

Но и это не сработало. Неверный синтаксис или что-то в этом роде. Я уверен, что есть способ сделать это, но я просто не уверен в синтаксисе.

Единственная альтернатива, которая приходит мне в голову, — это поместить команды в .shфайл и закрыть этот файл, но это не совсем то, что я смогу сделать в системе Linux, в которой мне нужно это реализовать (ограничения привилегий и т. д.).

решение1

Самое простое решение: создать скрипт оболочки с помощью

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz

И использовать nohup myscript. Возможно, с некоторой дополнительной документацией в скрипте.

(Да, я обожаю документацию. Особенно, когда работаю с несколькими людьми или когда вы когда-нибудь можете уйти с работы, а вашему преемнику нужно будет выяснить, почему».)


Альтернативой может быть запуск новой оболочки для подзадачи (в данном случае tar и move)

nohup `$(tar -zcf архив.tar.gz.tmp mydir; mv архив.tar.gz.tmp архив.tar.gz)


Альтернатива 2:

nohup ```tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```.

Хотя мне действительно больше нравится сценарий. Комментарии в нем могут оказаться весьма полезными, когда вы или кто-то другой через несколько лет взглянет на сценарий и задастся вопросом, почему он был сделан именно так.

Не по теме: Как, черт возьми, мне опубликовать anser с обратным апострофом внутри? (Команда для оболочки «использовать эту команду; передать вывод другой команде в качестве ввода»).

решение2

Я думаю, вам нужны скобки.

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &

решение3

Может быть, обертка bash?

nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &

решение4

screenДля подачи команд и отключения от сеанса экрана можно использовать :

screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach

Команды будут выполняться так же, как и с nohup.

Связанный контент