bash 配置文件适用于用户,但不适用于 sudo

bash 配置文件适用于用户,但不适用于 sudo

我已修改 .profile,如果插入了闪存驱动器,则包含一个文件夹。以用户身份运行命令时,它工作正常,但告诉我脚本必须由 sudo 运行(这是我想要的)。但是,当我尝试使用 sudo 运行它时,我收到“命令未找到”

我的 /var/www 文件夹中有一个符号链接(flash),指向我的 /media/flash 驱动器。(不用担心这个设置,因为它仅适用于开发)

这是我的用户的 .profile:

# set PATH so it includes flash scripts
if [ -d "/var/www/flash/scripts" ] ; then
    PATH="/var/www/flash/scripts:$PATH"
fi

当我尝试以 sudo 身份运行时,我得到:

sudo: script: command not found    

有任何想法吗?

答案1

当您运行脚本时,sudo您正在尝试访问 root。因此,您$HOME/.profile将不会被访问,而是/root/.profile会被访问。

$HOME/.profile因此,请对进行与 中相同的更改/root/.profile。要创建/root/.profile。请使用以下命令。

sudo su
cd /root
touch .profile

进行更改后尝试运行脚本。

或者编辑$HOME/.bashrc并添加以下行

alias sudo='sudo env PATH=$PATH $@'

希望这可以帮助。

答案2

这就是 ubuntu 中 sudo 的行为。

例如运行以下命令

echo 'echo $PATH' | sh

还有这个

echo 'echo $PATH' | sudo sh 

你会看到输出不同!为了避免不同的路径,请将以下内容放入你的 ~/.bashrc 中

alias sudo='sudo env PATH=$PATH'

答案3

$PATH您可以在使用 时保留 的值sudo。使用visudo添加到$PATH要保留的变量列表中。在 中类似下面的一行/etc/sudoers应该可以解决问题:

Defaults env_keep += "PATH"

答案4

您还可以将文件移动到 sudoers 使用的目录中:

    sudo mv $HOME/bash/script.sh /usr/sbin/ 

相关内容