我的bash shell出现了令人担忧的问题。我正在编辑bash_profile
并意外导出了一个不完整的命令(export PATH=/usr/local/bin
)。在我重新加载终端后,几乎所有的bash命令都无法正常工作。当我尝试运行其中任何一个时,错误状态为:command not found
。
我该如何解决这个问题?是否有其他方式可以打开或找到我的bash_profile
?
我很感激我能在这个问题上立即得到任何意见。提前谢谢。
答案 0 :(得分:2)
您可以执行命令,如果您可以提供目录名称。几乎所有基本的Unix命令都在/bin
或/usr/bin
目录下。例如,/bin/mv
。
幸运的是,内置命令仍然可识别。
暂时移开.bash_profile
和.bashrc
文件,查看系统默认设置。
您可以在命令行上手动编辑PATH
:
$ PATH="/bin:/usr/bin"
$ cd
$ mv .bash_profile .bash_profile.bak
$ mv .bashrc .bashrc.bak
$ mv .profile .profile.bak
$ mv .bash_login .bash_login.bak
注意 :其中一些mv命令可能会因为该特定文件可能不存在而失败。
可以访问大多数基本的Unix命令。或者,您可以使用其完整目录名称指定命令:
$ PATH="/bin:/usr/bin"
$ cd
$ /bin/mv .bash_profile .bash_profile.bak
$ /bin/mv .bashrc .bashrc.bak
$ /bin/mv .profile .profile.bak
$ /bin/mv .bash_login .bash_login.bak
现在,再次登录,看看您的默认$PATH
设置为什么。这是由/etc/profile
设置的。您可能会发现它很好,并删除了启动脚本中的PATH
设置。
PATH
的标准是这样的:
/usr/share/bin
或/usr/local/bin
- 这些包含非标准的Unix / Linux命令。例如,如果在系统上安装Maven,mvn
命令通常位于其中一个目录中(可能作为符号链接)。此目录是存储/bin
和/usr/bin
目录中找不到的命令的位置。此目录是第一个,因此您可以使用更新版本替换系统附带的版本。例如,我可能安装了VIM 6.4,但我想使用7.3版本。/bin:/usr/bin
- 99%的Unix命令所在的标准目录。$HOME/bin
- 这些是您编写的可执行文件 - 脚本或二进制文件。这是在PATH列表的末尾,因为它确保您不会意外地执行错误版本的命令。想象一下,如果一些小丑写了一个名为cp
的shell脚本,而不是执行/bin/rm
并将其放在$HOME/bin
目录中。您将看到的其他目录可能包括/sbin/
和/usr/sbin
这些管理员命令(ping
和ifconfig
有时会在其中一个目录中。){ {1}}(或存储X11二进制文件的任何地方)。有时其他命令会使用您的PATH,例如Perlbrew。
答案 1 :(得分:1)
@fedorqui's comment提供了快速解决方法。
OP也可以使用以下内容快速访问具有$PATH
默认值的shell:
使用原始默认环境创建bash
shell :
运行:
/usr/bin/env -i bash --norc
注意:
env
的{{1}}选项,许多通常设置的环境变量将不会在结果shell中设置,例如-i
,USER
和HOME
。
LANG
值大概是一个硬编码到$PATH
本身,但它应该提供对至少标准实用程序的访问权。bash
会禁止加载--norc
,这通常默认发生在交互式非登录 bash shell中(~/.bashrc
也支持bash
禁止加载--noprofile
和/etc/profile
的选项,但这里不适用,因为创建的shell是非登录 shell。~/.bash_profile
位于当前shell的env
中,$PATH
将会这样做。env -i bash --norc
至少在env
Linux和FreeBSD / OSX上,可能还在其他平台上。