我以前是 Windows 用户,但在使用 Unix shell 时遇到了麻烦。
su - $USER -p -c "$CMD"
这个命令就像 this one必须访问给定环境的路径变量,但它没有。当我将其更改为 su - $USER -p -c "export PATH=$PATH; $CMD"
时,它按预期工作。 (我猜)。
我正在 init 脚本中尝试此代码,但我还有另一个问题 here与此相关。 (抱歉重复,但我确定哪里是正确的提问地点。)
- 第一个问题是为什么
su - $USER -c $CMD
会忘记所有先前定义的环境变量? - 在命令中插入路径是否正确,例如
su - $USER -p -c "export PATH=$PATH; $CMD"
编辑
su $USER -p -c "whoami && echo $PATH && $CMD"
,我尝试删除-
。仍然无法正常工作。- 当我尝试以下命令时
su - $USER -p -c "whoami && echo $PATH && $CMD"
我可以看到 $user 和 $path 设置正确。但它仍然无法在 $PATH 下找到二进制文件。
编辑2
我又做了一些实验,得出了最短的工作形式:su $USER -c "PATH=$PATH; $CMD"
。我仍然不确定这是否是最佳实践?
最佳答案
su -
表示切换用户并加载新用户的环境(类似于您以用户身份登录时加载的环境)。尝试在不使用 -
的情况下执行 su
。这会切换用户,但会保持环境与切换用户之前的状态相同。
关于ruby-on-rails - su - $USER -p -c "$CMD"未访问路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893425/