似乎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
为分配。它只是一个参数nohup
,nohup
不支持这样设置变量。
如果您在 shell 中(并且您很可能是因为~/
并且&
也需要 shell),那么您可以将变量放在 的环境中nohup
,它将被继承:
foo=bar nohup whatever &
但这显然可能会影响到nohup
自己。如果您不在 shell 中和/或您不希望变量位于 的环境中nohup
,请告诉nohup
运行一个将解释语法的 shell:
nohup sh -c 'foo=bar exec whatever'
这里我明确使用了,exec
因为在赋值之后我们不再需要 shell 了。我相信有些 shell 会隐式执行最后一个命令(至少在某些情况下),有些可能不会。