尝试从另一个脚本在后台运行脚本时“没有这样的文件或目录”

尝试从另一个脚本在后台运行脚本时“没有这样的文件或目录”

当我尝试在后台运行另一个脚本时,我的 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

  1. 我认为您正在寻找的命令是nohup.不是nohub

  2. 你不能这样做:

    cmd="nohub bash ${exedir}/${exe} &>/dev/null &"
    "${cmd}"
    

    它正在做的是尝试运行一个由以下内容组成的命令一个字 nohub bash /export/home/myself/bin/mytestprogram &>/dev/null &-包括空格和标点符号作为该单词的一部分。 shell 不会评估该命令并以空格分割它。

这里有几个答案,例如我们如何运行存储在变量中的命令?,解释了如何安全地构建命令然后执行它。就我个人而言,我认为当您想使用命令时最好只运行命令,而不是将其放入变量并尝试执行其值。

相关内容