我有一个ksh脚本,必须执行长时间运行的命令。长时间运行的命令是通过脚本中的Heredoc执行的。我想将命令(在下面的示例中由cat表示)放到后台,但是仅在从heredoc获取输入后才可以。由于“ nohup cat ..”立即完成,并且我看到一个空的nohup.out文件,因此我不确定脚本是否正在执行我需要做的事情,即生成heredoc命令的nohupped版本并退出,然后离开该命令需要花费多长时间才能完成。
我将cat用作“命令”,因为它也坐在那里,只是等待控制台输入。
没有nohupping的工作版本:
#!/bin/ksh
cat << EOF
Hello
World
HOw are you!
EOF
尝试nohup heredoc:
#!/bin/ksh
nohup cat <<EOF
Hello
World
HOw are you!
EOF
似乎可以正常工作,输出将按预期输出到nohup.out中。但是现在,如何将其置于后台?我尝试了以下内容(及其多种变体):
#!/bin/ksh
nohup cat & <<EOF
Hello
World
HOw are you!
EOF
但是nohup.out为空,所以我不确定上面的操作。后台没有正在运行的“猫”,告诉我它至少已经运行并完成了-也许根本没有运行。我无法发明任何其他变体来尝试将kdoc脚本中的Heredoc置于后台。
关于实现此目标的任何建议使用heredoc?
这里有两个选项。
[您可以尝试将nohup序列包装在一个函数中,该函数看起来更清晰,然后使用后跟与号调用该函数。
使用功能,例如:
#!/bin/ksh
function dostuff
{
nohup cat <<- END
Hello
World
How are you!
END
}
dostuff &
wait
[您也可以尝试将要后台处理的命令包装到分组{}块中,并用;分隔每个命令;在方括号内,然后通过以下方式将该块作为背景:
{ nohup cat <<- EOF
...
EOF
; whatever
} &