我的问题与另一个开放的问题。我的 echo $PATH 给出的输出如下
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/
但跑步
ifconfig
给我一个像
Command 'ifconfig' is available in '/sbin/ifconfig'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
ifconfig: command not found
运行其他问题中给出的命令后
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
它运行是否配置但阻止了 ruby rails 或 rvm 的其他命令。
寻求帮助如何解决这个问题。为什么会发生这种情况?
答案1
尝试下面的命令
export PATH=$PATH:/usr/sbin
或(如果您想设置所有路径)
export PATH=$PATH:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games
答案2
您的原文$PATH
(您发布的行不太易读):
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:
/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:
/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:
/usr/local/bin:/usr/bin:/bin:/usr/games:
/home/sahil/.rvm/bin{}:
/home/android-sdks/{}:
/home/android-sdks/platform-tools/{}:
/home/android-sdks/tools/{}:
/home/sahil/android-sdks/tools{}:
/home/sahil/android-sdks/tools:
/home/sahil/android-sdks/platform-tools/
您有/usr/local/bin
,/usr/bin
并且/bin
。正如您已经发现的,ifconfig
在里面/sbin
。
因此,在设置该路径的地方您还需要包含/sbin
。
看红宝石关于如何执行此操作的文档。
答案3
/sbin 通常是路径的一部分。其他发行版(如 Fedora)不会将其添加到普通用户的 PATH 中,但我认为 Ubuntu 总是会这样做。我建议您检查您的 /etc/environment 文件,看看它是否有效并且是否已将 /sbin 添加到路径中。当我运行猫/等/环境,我得到以下输出:
adnan@adnan-laptop:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
如你看到的/sbin已经是 PATH 环境变量的一部分。如果您的文件具有相同的内容,则检查其权限,否则将 /sbin 添加到此文件中的 PATH。对我来说,权限是:
adnan@adnan-laptop:~$ ls -l /etc/environment
-rw-r--r-- 1 root root 79 2009-10-29 01:55 /etc/environment
答案4
什么是PATH
变量?
PATH
是目录路径列表。当用户键入命令而不提供完整路径时,将检查此列表以查看其中是否包含指向该命令的路径。此变量中的路径顺序表示搜索命令的顺序,如果在多个目录中存在同名程序,则将执行位于列表开头(左侧)最近的文件夹中的程序。
其他命令(来自 ruby rails 和 rvm)被阻止的原因是您执行了以下命令:
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
导致PATH
不含此类程序的文件夹,即:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin
你应该做的是添加/sbin
你自己的PATH
。
如何添加/sbin
到PATH
由于PATH
基本上始终在环境中,因此您无需将其导出,只需将目录添加/sbin
到其中即可。为此,您可以在 bash 中执行
PATH="$PATH:/sbin"
你的路径现在看起来应该是这样的:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/:/sbin
不过,此更改不会是永久性的,一旦您关闭当前会话,PATH
将重新加载以前的值。为了使其永久生效,您应该将此更改添加到文件中~/.profile
。一种方法如下:
echo 'PATH="$PATH:/sbin"' >> ~/.profile
现在只需要在当前shell中执行“~/.profile”的内容就可以了。
source ~/.profile
您已准备就绪,不仅您当前的 shell,而且您所有未来的会话都将包含PATH
该目录。
为什么我使用 ~/.profile 而不是 ~/.bashrc?
这个概念对你有用:
~/.profile
是放置适用于整个会话的内容的地方,例如您登录时想要启动的程序(但不是图形程序,它们进入不同的文件)和
环境变量定义。
~/.bashrc
是放置仅适用于 bash 本身的内容的地方,例如别名和函数定义、shell 选项和提示设置。(您也可以在此处放置键绑定,但对于 bash,它们通常放入 ~/.inputrc。)
你应该有/sbin
吗PATH
?
我不会在这里讨论是否/sbin
应该默认,PATH
因为这可能不是一个很有成效的讨论。我有,如果你想要也可以。你来决定。