使用 'su' 时出现 bash 路径问题

使用 'su' 时出现 bash 路径问题

在 Ubuntu 中清澈山猫,我正在尝试做

su -l user -c "foo.sh args"

其中是 中集合foo.sh上的可执行 bash 脚本。不幸的是,由于找不到 ,因此失败了。如果我在命令行中手动输入,它工作正常。PATH 扩充已在 中完成,并且无论我是否以交互方式使用 ,它似乎都可以工作,但当我指定命令时它似乎不起作用。PATH~user/.bashrcfoo.shsu -l userfoo.sh args~user/.bashrcsu-l

知道为什么会这样吗?我该如何解决这个问题?

答案1

它以非交互式登录 shell 的形式启动 shell,因此它处理~/.profile而不是~/.bashrc。您可以PATH在该文件中设置您的,也可以在它们都来源的公共文件中进行设置。有些人/发行版将一个启动文件设置为另一个的来源,但我不建议这样做。

man bash

当 bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。

相关内容