ruby-on-rails - su - $USER -p -c "$CMD"未访问路径

标签 ruby-on-rails linux shell unix su

我以前是 Windows 用户,但在使用 Unix shell 时遇到了麻烦。

su - $USER -p -c "$CMD" 这个命令就像 this one必须访问给定环境的路径变量,但它没有。当我将其更改为 su - $USER -p -c "export PATH=$PATH; $CMD" 时,它按预期工作。 (我猜)。

我正在 init 脚本中尝试此代码,但我还有另一个问题 here与此相关。 (抱歉重复,但我确定哪里是正确的提问地点。)

  1. 第一个问题是为什么 su - $USER -c $CMD 会忘记所有先前定义的环境变量?
  2. 在命令中插入路径是否正确,例如 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/

相关文章:

ruby-on-rails - 本地开发环境限制Elasticsearch内存使用的最佳实践

ruby-on-rails - rails : how to get datetime from model in original timezone (different entries = different timezones)

ruby-on-rails - Jekyll 液体异常 : Cannot find/bin/sh on Windows

linux - gnu C++ 库在向量分配期间陷入循环

c - 当某个进程打开文件时,unlink() 会做什么?

bash - 如何使用CTRL + C退出并杀死正在运行的Docker容器?

ruby-on-rails - 清除 memcached 中的缓存时保留 session

linux - 构建单独的匹配和不匹配文件列表

linux - awk 仅当行以结果开头时才匹配

bash - 为什么 "set -v"似乎不能在 bash 的子 shell 中工作?