我正在尝试编写一个简单的脚本,用于在没有作业排队系统的服务器上“提交作业”。在 bash 终端中,我认为我可以使用以下命令nohup
来实现这一点,例如:
nohup bash -c 'echo "Hello world" > foo.out' &>/dev/null
但是,我想将其作为 bash 命令来实现,因此我可以使用以下命令执行上述操作:
bgrun 'echo "Hello world" > foo.out'
现在,我为此编写 bash 脚本时遇到了困难。因此,我得到了以下内容:
#!/bin/bash
cmd="bash -c '$*'"
nohup $cmd &>/dev/null
现在,如果我运行上述代码,输出将被定向到/dev/null
而不是foo.out
。有什么办法可以解决这个问题吗?
答案1
我尝试如下:
#!/bin/bash
cmd="bash -c '$*'"
nohup $cmd > /tmp/foo.out
我按如下方式执行:
sh -x nohup.sh ls
/tmp/foo.out
我可以看到文件列表的o/p 。
答案2
看来我可以通过以下方式实现我想要的eval
:
#!/bin/bash
cmd="nohup bash -c '$*' &>/dev/null &"
eval $cmd