我是 Unix 新手,在为我的论文安装程序的过程中,我必须使用基本 Unix 命令的 PATH,例如ls
.每次我输入ls
要列出文件的目录名称时,它都会显示为:
-bash: ls: No such file or directory
我可以做什么来解决这个问题?非常感谢任何帮助!
答案1
立即重置您的路径(即在任何类型的注销之前):
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
它不会恢复您的完整路径,但基本实用程序将再次可用。
下面是发生这种情况的一个例子:
您有一个 PATH 变量(在读取时称为 $PATH)
就像是:
$ echo $PATH
/home/durrantm/.rvm/gems/ruby-2.0.0-p247/bin:/home/durrantm/.rvm/gems/ruby-2.0.0-p247@global/bin:/home/durrantm/.rvm/rubies/ruby-2.0.0-p247/bin:/home/durrantm/.rvm/bin:/h
ome/durrantm/.autojump/bin:/usr/local/heroku/bin:/home/durrantm/bin:/home/durrantm/.autojump/bin:/usr/local/heroku/bin:/home/durrantm/.autojump/bin:/usr/local/heroku/bin:
/home/durrantm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/durrantm/.rvm/bin:/home/durrantm/.rvm/bin:/home/durrantm
/.rvm/bin
您尝试添加,但您不小心使用了
PATH=PATH:other_dir
代替
PATH=$PATH:other_dir
结果是你的道路变成了
PATH:other_dir
然后所有像 ls 和 sed 这样的实用程序都不起作用
您可以通过执行以下操作来修复最小集
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果登录点文件弄乱了您的 PATH,这特别有用。
检查您的 .bashrc 和/或 .bash_profile 文件是否有任何 PATH 更改。
正如 Greg 所说,您也可以注销(或者更安全的选择,打开一个新窗口,以防登录到机器现在被破坏 - 这发生在我身上,意味着甚至非交互式登录也被破坏了!)然后 echo $PATH从新窗口。
当你不使用任何值时,也会发生同样的事情PATH=
。它会“清除”您当前的路径并导致这些问题。
至于为什么,当您遇到这些问题时 cd 有效而 ls 不起作用:
cd
是一个“内置”命令,不需要您的 PATH 来查找程序ls
是一个程序,需要使用 PATH 来查找它的位置。
您可以通过以下方式查看:
$ builtin ls
-bash: builtin: ls: not a shell builtin
14:47:29 mdurrant C02MH2DQFD58 /Users/mdurrant
$ builtin cd
14:47:31 mdurrant C02MH2DQFD58 /Users/mdurrant
$
没有错误意味着该命令是内置命令
在“继续”(或退出)之前...
确保测试任何更改(特别那些正在执行 PATH 设置命令的 .bashrc、.profile 等)通过打开一个新窗口或执行 source ~/.bash_profile 来运行它。保持窗口和编辑器(当您更改 .bash_profile 文件时)打开也是一个好习惯,以防您的更改不起作用并阻止您打开新窗口来编辑文件。尽管您仍然可以使用 TextEdit 或其他简单的编辑器来更改文件(例如避免命令行和 vi)。如果/当您的外壳损坏或您甚至可能无法登录时,请小心不要重新启动。这真的很糟糕(如果没有另一个帐户,su
你就会被淹没)。发生在我身上了!
我的“额外帐户”修复当时也是一个救星,强烈推荐给所有人(现在就做!)
答案2
您所做的更改PATH
可能是暂时的。关闭您所在的外壳exit
并重新打开它。
如果您编辑了PATH
为新打开的 shell 设置 的文件,请指定命令的完整路径以修复您已更改的任何内容(例如/usr/bin/vim
)。
答案3
此答案适用于那些在编辑后注销的人.bash_profile
,这意味着您可能处于无法使用登录屏幕的情况。
我不能向你保证这对你有用。
简答
如果由于某种原因,您甚至无法访问 shell,请使用Ctrl+ Alt+切换到虚拟控制台F2并登录。进入 shell 提示符后,使用编辑有问题的文件,其中command -p <insert_command_here>
<insert_command_here>
是类似的东西nano .bash_profile
。
长答案
我正在使用 Manjaro,但我怀疑这在这种情况下有什么意义。
我当时在登录屏幕上。我输入了我的凭据,然后什么也没发生。由于一切都不起作用了,我没有任何提示可以使用。我可以很好地移动光标,但登录屏幕按钮都不起作用。
我按了Ctrl+ Alt+ F2。我现在有了一个可以使用的控制台终端。我可以使用Ctrl+ Alt+返回上一个屏幕F1,但这不是必需的。
我遇到了登录提示并填写了我的凭据。
我尝试使用习惯使用的命令,但没有任何效果。我会得到默认值:
-bash: something_something: command not found.
但是,我发现我可以使用cd
,但我无法使用 列出目录内容ls
。我做了一些研究,发现这cd
是一个内置命令。我想确认我可以使用内置命令,并找到了一种显示所有命令的方法:
compgen -b
我现在遇到了很多可以使用的命令。我不知道他们大多数人做什么。我可以识别诸如source
、cd
、echo
和 之类的命令exit
。我找不到任何好的材料来解释如何使用这些内置命令。也许我只是搜索得不够好。无论如何,由于help
也是一个内置命令,我尝试在一些内置命令上使用它。最终我做到了:
help command
选项之一是:
command -p
使用默认值
PATH
保证找到所有默认实用程序。
这听起来非常有用,所以我继续尝试这样做:
command -p ls
它奏效了。现在我认为我只需要编辑该.bash_profile
文件,所以我这样做了:
cd ~
command -p nano .bash_profile
然后我删除了我添加的几行弄乱了我的路径的行。如果您不知道那是哪一行,那么我想使用某种默认路径是安全的。我可以想象这是一件事。如果这不是.bash_profile
导致您出现问题的原因,那么我想您可以尝试编辑造成问题的文件。
然后我重新启动系统,一切恢复正常。
答案4
当我安装Andriod Stuido后,并写了错误的SDK路径时,就发生了这种情况。出现多个导出错误:不是有效的标识符。并且所有命令都不起作用。我必须在记事本(终端外)中打开 bash_profile 并删除错误的路径。