命令前带有 shell 变量的 Nohup

命令前带有 shell 变量的 Nohup

似乎nohup无法运行前面有环境变量的命令。例如,

nohup LD_PRELOAD=~/file.so ./run &

nohup: failed to run command 'LD_PRELOAD=/home/mahmood/file.so': No such file or directory

事实上,file.so存在但它不是命令。我该如何解决这个问题?

答案1

像这样设置一个变量

foo=bar whatever

是 shell 语法的一部分。赋值必须在命令之前。

在您的情况下,外壳程序无法识别LD_PRELOAD=~/file.so为分配。它只是一个参数nohupnohup不支持这样设置变量。

如果您在 shell 中(并且您很可能是因为~/并且&也需要 shell),那么您可以将变量放在 的环境中nohup,它将被继承:

foo=bar nohup whatever &

但这显然可能会影响到nohup自己。如果您不在 shell 中和/或您不希望变量位于 的环境中nohup,请告诉nohup运行一个将解释语法的 shell:

nohup sh -c 'foo=bar exec whatever'

这里我明确使用了,exec因为在赋值之后我们不再需要 shell 了。我相信有些 shell 会隐式执行最后一个命令(至少在某些情况下),有些可能不会。

相关内容