路径中的 sudo 问题

And*_*anu 1 ubuntu bash path arch-linux

使用:

Linux nomemory 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我在我的文件夹$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
Run Code Online (Sandbox Code Playgroud)

问题是在 Ubuntu 中,当前缀为sudo. 在脚本运行的 Arch 上,行为是不同的。

让我给你举个例子(aaa是一个 foobar 类型的脚本):

nomemory@nomemory:~$ aaa
aaa
nomemory@nomemory:~$ sudo aaa
sudo: aaa: command not found
nomemory@nomemory:~$
Run Code Online (Sandbox Code Playgroud)

如果回声 $PATH:

nomemory@nomemory:~$ sudo echo $PATH
/home/nomemory/.scriptfarm/script:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

你知道为什么我的脚本不工作,如果我用sudo. 任何解决方案?

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

Mat*_*hen 5

您的测试具有误导性,因为 PATH 在调用 sudo 之前已扩展。相反,请执行以下操作:

sudo sh -c 'echo $PATH'
Run Code Online (Sandbox Code Playgroud)

你会看到有一条不同的路径。

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

PATH="$PATH:/home/nomemory/.scriptfarm/scripts"
Run Code Online (Sandbox Code Playgroud)