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

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

我的/ var / www文件夹中有一个指向我的/ media / flash驱动器的符号链接(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 

有任何想法吗?

当您以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 $@' 

希望这可以帮助。

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

 Defaults env_keep += "PATH" 

这就是ubuntu中sudo的行为..

例如,运行以下命令

 echo 'echo $PATH' | sh 

而不是这一个

 echo 'echo $PATH' | sudo sh 

你看到输出是不同的! 为了避免不同的路径,将以下内容放在〜/ .bashrc中

 alias sudo='sudo env PATH=$PATH' 

您还可以在sudoers used目录中移动文件:

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