Bash:无效的命令

时间:2014-06-17 09:42:00

标签: linux macos bash shell terminal

我的bash shell出现了令人担忧的问题。我正在编辑bash_profile并意外导出了一个不完整的命令(export PATH=/usr/local/bin)。在我重新加载终端后,几乎所有的bash命令都无法正常工作。当我尝试运行其中任何一个时,错误状态为:command not found

我该如何解决这个问题?是否有其他方式可以打开或找到我的bash_profile

我很感激我能在这个问题上立即得到任何意见。提前谢谢。

2 个答案:

答案 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这些管理员命令(pingifconfig有时会在其中一个目录中。){ {1}}(或存储X11二进制文件的任何地方)。有时其他命令会使用您的PATH,例如Perlbrew

答案 1 :(得分:1)

@fedorqui's comment提供了快速解决方法。

OP也可以使用以下内容快速访问具有$PATH默认值的shell:

使用原始默认环境创建bash shell

  • 没有运行配置文件/初始化脚本
  • 没有从当前shell继承任何环境变量

运行:

 /usr/bin/env -i bash --norc

注意:

  • 由于使用env的{​​{1}}选项,许多通常设置的环境变量将不会在结果shell中设置,例如-iUSERHOME
    • 同样,您获得的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上,可能还在其他平台上。