当我尝试在后台运行另一个脚本时,我的 run.sh 脚本出错。
控制台错误字符串
./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null & : No such file or directory
- 无法发布该脚本,因为其主机不在互联网上。
这是有效的
它构建了目标程序的绝对路径..
例如: 目标脚本的绝对路径
/export/home/myself/bin/mytestprogram
手动或通过脚本运行良好...它使用脚本变量构建此命令行,如下所示
Bash 脚本如何构建命令字符串
cmd="${exedir}/${exe}"
我从我的脚本中运行这个,说
调用目标命令字符串的 Bash 脚本行
"${cmd}"
所有有效的.. 所以在前台运行脚本是有效的。
现在,当我尝试在后台运行完全相同的路径和命令时,什么不起作用。
我正在尝试运行:
在后台运行命令字符串
nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &
当我手动将它从脚本的输出传递到命令行时,它会起作用。当我在命令行上手动调用它时,它起作用了。我的脚本实际上回显了控制台的命令,我剪切并粘贴了它并且它起作用了。但是当 run.sh 脚本调用相同的命令时,它不起作用?
我使用与上述前台调用相同的变量来构建它,如下所示。
后台命令字符串是如何构建的
cmd="nohup bash ${exedir}/${exe} &>/dev/null &"
我将此命令回显到控制台,如下所示:
后台命令字符串如何发送到控制台
echo -e "$cmd"
并这样称呼它..
"$cmd"
我的错误消息再次是:
控制台错误字符串
./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &
:No such file or directory
有什么想法吗?
答案1
我认为您正在寻找的命令是
nohup
.不是nohub
。你不能这样做:
cmd="nohub bash ${exedir}/${exe} &>/dev/null &" "${cmd}"
它正在做的是尝试运行一个由以下内容组成的命令一个字
nohub bash /export/home/myself/bin/mytestprogram &>/dev/null &
-包括空格和标点符号作为该单词的一部分。 shell 不会评估该命令并以空格分割它。
这里有几个答案,例如我们如何运行存储在变量中的命令?,解释了如何安全地构建命令然后执行它。就我个人而言,我认为当您想使用命令时最好只运行命令,而不是将其放入变量并尝试执行其值。