Я прикрепляю к экрану с параметрами -rD
Из руководства:
-D -r
Reattach a session. If necessary detach and logout remotely first.
Насколько я понимаю, вы хотите скопировать все содержимое вашего скрипта и вставить его как 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.
Использование вашего кода:
nohup bash <<EOF &
WB=$1
sleep 2h;
commands...
kill \$WB
EOF
Обратите внимание, что $ 1
будет расширяться при чтении кода; чтобы $ WB
расширялся при выполнении кода, необходимо заключить $
в кавычки.