我如何从ksh脚本中在后台nohere文档?

问题描述 投票:0回答:1

我有一个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

background ksh execution heredoc nohup
1个回答
0
投票

这里有两个选项。

[您可以尝试将nohup序列包装在一个函数中,该函数看起来更清晰,然后使用后跟与号调用该函数。

使用功能,例如:

#!/bin/ksh

function dostuff
{
 nohup cat <<- END
        Hello
        World
        How are you!
END
}


dostuff &
wait

[您也可以尝试将要后台处理的命令包装到分组{}块中,并用;分隔每个命令;在方括号内,然后通过以下方式将该块作为背景:

{ nohup cat <<- EOF
          ...
          EOF
          ; whatever 
} &
© www.soinside.com 2019 - 2024. All rights reserved.