在path中的sudo问题

使用:

Linux nomemory 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux 

我在$HOME有一个名为~/.scriptfarm/scripts的文件夹,我保留了一些自定义脚本。

 nomemory@nomemory:~$ ls -l /home/nomemory/.scriptfarm/script total 20 -rwxr-xr-x 1 nomemory nomemory 10 2010-09-21 01:31 aaa -rwxr-xr-x 1 nomemory nomemory 31 2010-09-21 00:47 pt.chc -rwxr-xr-x 1 nomemory nomemory 35 2010-09-21 00:47 pt.int -rwxr-xr-x 1 nomemory nomemory 34 2010-09-21 00:47 pt.rem -rwxr-xr-x 1 nomemory nomemory 54 2010-09-21 00:47 pt.up 

问题是,在Ubuntu下,没有任何脚本正在与sudo前缀工作。 Arch上脚本运行的行为是不同的。

让我给你一个例子( aaa是一个foobartypes的脚本):

 nomemory@nomemory:~$ aaa aaa nomemory@nomemory:~$ sudo aaa sudo: aaa: command not found nomemory@nomemory:~$ 

如果一个回声$ PATH:

 nomemory@nomemory:~$ sudo echo $PATH /home/nomemory/.scriptfarm/script:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

你知道为什么我的脚本不工作,如果我用sudo前缀。 任何解决scheme

稍后编辑:我发现的解决方法是为sudo添加一个别名: sudo env PATH=$PATH $@

你的testing是误导性的,因为在调用sudo之前PATH被扩展了。 相反,做:

 sudo sh -c 'echo $PATH' 

你会看到有一个不同的path。

要在系统范围的PATH中包含/home/nomemory/.scriptfarm/scripts ,可以修改/etc/profile

 PATH="$PATH:/home/nomemory/.scriptfarm/scripts" 

在Ubuntu(至less10.04) sudoers文件中有一个选项来重置环境。

 Defaults env_reset 

您可以删除它,或者您应该能够在每个用户的基础上使用SETENV来保留旧的环境。

手册页说env_reset

如果设置,sudo将重置环境以仅包含LOGNAME,SHELL,USER,USERNAME和SUDO_ *variables。 然后添加调用方环境中与env_keep和env_check列表匹配的任何variables。 使用-V选项以root身份运行sudo时,会显示env_keep和env_check列表的默认内容。 如果设置了secure_path选项,则其值将用于PATH环境variables。 此标志默认打开。

看起来问题在于Ubuntu使用SECURE_PATH选项编译sudo,因此无法传递PATH环境。 您可以通过以root身份运行时指定-V选项来查看。 因此,命令sudo sudo -V转储一个默认列表。 看来唯一的解决方法是重新编译sudo。

您可以使用which aaa来找出aaa所在的位置,然后从那里运行它。 如果没有,你可能能够

  sudo 'export PATH='$PATH'; aaa' 

使用nomemoryreplace这些文件所在的用户帐户的名称:

sudo ~nomemory/.scriptfarm/scripts/aaa

绝对path=♥