基本命令不起作用,即:-bash:ls:没有这样的文件或目录

基本命令不起作用,即:-bash:ls:没有这样的文件或目录

我是 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

我现在遇到了很多可以使用的命令。我不知道他们大多数人做什么。我可以识别诸如sourcecdecho和 之类的命令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 并删除错误的路径。

相关内容