Как выполнить nohup в heredocument?

Я прикрепляю к экрану с параметрами -rD

Из руководства:

-D -r
Reattach a session. If necessary detach and logout remotely first. 
1
30.12.2016, 04:11
2 ответа

Насколько я понимаю, вы хотите скопировать все содержимое вашего скрипта и вставить его как heredoc для его выполнения.Вы можете это сделать, но есть одна загвоздка: как присвоить значение позиционному параметру $ 1, который появится в heredoc? Хитрость здесь в том, чтобы передать этот аргумент в bash, поместив его после знака - (который отделяет аргументы, которые вы передаете самому bash, от аргументов, которые вы передаете скрипту). Bash, конечно, должен читать команды со стандартного ввода, поэтому необходимо указать флаг -s .

Чтобы увидеть, как это работает с кодом из вашего примера, откройте новый псевдотерминал и введите это (будьте осторожны: знаки кавычек рядом с первым EOF0 являются обязательными, они предотвращают расширение $ 1 внутри самого heredoc):

nohup bash -s -- $$ <<'EOF0' &
#!/bin/bash

WB=$1
sleep 2h;
commands...
kill $WB
EOF0

Я должен вам сказать, что EOF0 сам по себе не имеет никакого особого значения. Вы можете использовать любую строку для разделителя heredoc (например, это могла быть 'EOF' или 'HEREDOC_DELIMITER' ): важно то, что она заключена в одинарные кавычки, возле знака << ; это предотвращает любое расширение внутри heredoc, что позволяет вам как использовать аргумент сценария (так же, как вы можете использовать $ 1 в опубликованном вами коде), так и вкладывать другие heredoc.

2
29.04.2021, 00:06

Использование вашего кода:

nohup bash <<EOF &
WB=$1
sleep 2h;
commands...
kill \$WB
EOF

Обратите внимание, что $ 1 будет расширяться при чтении кода; чтобы $ WB расширялся при выполнении кода, необходимо заключить $ в кавычки.

1
29.04.2021, 00:06

Теги

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