Насколько я понимаю, вы хотите скопировать все содержимое вашего скрипта и вставить его как 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.
Cronjob позволит это:
# At 11pm every day, enable sleep after 30s
0 23 * * * /sbin/hdparm -S6 /dev/disk/by-id/...
# At 5pm on weekdays, disable sleeping
0 17 * * 1-5 /sbin/hdparm -S0 /dev/disk/by-id/...
# At 3pm on the weekend, disable sleeping
0 15 * * 0,6 /sbin/hdparm -S0 /dev/disk/by-id/...