mahmood Asked: 2020-01-01 02:58:25 +0800 CST2020-01-01 02:58:25 +0800 CST 2020-01-01 02:58:25 +0800 CST Nohup 在命令之前使用 shell 变量 772 似乎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存在但它不是命令。我该如何解决? bash nohup 1 个回答 Voted Best Answer Kamil Maciorowski 2020-01-01T03:34:14+08:002020-01-01T03:34:14+08:00 像这样设置变量 foo=bar whatever 是 shell 语法的一部分。赋值必须在命令之前。 在您的情况下,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 隐含地执行最后一个命令(至少在某些情况下),有些可能不会。
像这样设置变量
是 shell 语法的一部分。赋值必须在命令之前。
在您的情况下,shell 无法识别
LD_PRELOAD=~/file.so
为分配。它只是一个参数nohup
,nohup
不支持像这样设置变量。如果你在一个 shell 中(你很可能是因为
~/
并且&
还需要一个 shell),那么你可以将变量放在 的环境中nohup
,它将被继承:但这显然会影响到
nohup
自己。如果您不在 shell 中和/或您不希望变量位于 的环境中nohup
,请告诉nohup
运行将解释语法的 shell:在这里我明确使用
exec
了,因为在分配之后我们不再需要 shell。我相信有些 shell 隐含地执行最后一个命令(至少在某些情况下),有些可能不会。