Pelo que entendi, você quer copiar todo o conteúdo do seu script e colá-lo como um heredoc para executá-lo. Você pode fazer isso, mas há um problema: como você atribui um valor ao parâmetro posicional $ 1 que aparecerá no heredoc? O truque aqui é passar esse argumento para bash, colocando-o após um sinal --
(que separa os argumentos que você passa para se basear nos argumentos que você passa para o script). Bash deve, é claro, ler os comandos do stdin, então o -s
deve ser especificado.
Para ver isso no trabalho com o código do seu exemplo, abra um novo pseudoterminal e digite isto (cuidado: os sinais de aspas perto do primeiro EOF0
são obrigatórios, eles impedem a expansão de $1
dentro do próprio heredoc) :
nohup bash -s -- $$ <<'EOF0' &
#!/bin/bash
WB=$1
sleep 2h;
commands...
kill $WB
EOF0
No entanto, devo dizer que o EOF0 por si só não tem nenhum significado especial. Você pode usar qualquer cadeia que desejar para um delimitador heredoc (por exemplo, poderia ter sido 'EOF'
ou 'HEREDOC_DELIMITER'
): o que importa é que há aspas simples em torno dele, perto do sinal <<
; isso impede qualquer expansão dentro do heredoc, o que permite que você use argumentos de script (assim como você pode usar $1
no código que você postou) e aninhar outros heredocs.