今天我注意到我的路径No such file or directory
在末尾有一个入口,这导致了其他问题。
我的路径如下所示:/home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
我不知道添加了什么,想知道如何排除故障。
我检查了一下.bashrc
,没有发现任何问题。.bashrc
正如预期的那样添加了 anaconda 和 Ruby。
基于这个很好的答案关于如何设置 PATH,我检查了我的~/.profile
文件。配置文件脚本只运行 .bashrc,并将$HOME/bin
和添加$HOME/.local/bin
到路径中。这些路径只有在存在时才会添加,而且确实存在。
我读了我能理解的内容man login
。这让我检查了/etc/login.defs
,但看起来非常普通。我没有登录帮助中提到的任何其他文件。
有什么想法可以解决发生这种情况的地方吗?
编辑:2021 年 1 月 11 日
根据评论,我编辑了问题以表明我已经检查过了~.profile
。
我还制作了一个非常简单的版本~.bashrc
,重新启动,并使用调试命令运行 bash。PATH
仍然损坏。
geneorama@computer:~$ bash -x ~/.bashrc
+ HISTCONTROL=ignoreboth
+ shopt -s histappend
+ HISTSIZE=9999999
+ HISTFILESIZE=999999999
+ shopt -s checkwinsize
geneorama@computer:~$ $PATH
bash: /home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
编辑:2021 年 1 月 11 日(今天第二次编辑)
我还注意到,我无法通过手动设置路径或以 root 身份登录来修复错误。我尝试使用export
带引号的字符串来设置路径(我不知道这是否重要或是否是最好的方法)。
geneorama@computer:~$ $PATH
bash: /home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
geneorama@computer:~$ PATH="/home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
geneorama@computer:~$ $PATH
bash: /home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: No such file or directory
geneorama@computer:~$ sudo su -
[sudo] password for geneorama:
root@ativ4-v18:~# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
root@ativ4-v18:~# logout
geneorama@computer:~$ export PATH=/home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
geneorama@computer:~$ $PATH
bash: /home/geneorama/gems/bin:/home/geneorama/anaconda3/bin:/home/geneorama/.local/bin:/home/geneorama/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: No such file or directory
还查看了/etc/environment/
和/etc/environment.d/
。第一个是空的,第二个有两个文件90atk-adaptor.conf
和90qt-a11y.conf
,但它们似乎没有影响路径。
编辑:2021 年 1 月 11 日(今天第三次编辑)
即使我手动将路径设置为 just ,我/sbin
还是/bin
会收到错误。此时我不明白错误消息是否真的出现在我的路径上,还是随路径一起打印。
geneorama@computer:~$ export PATH=/sbin:/bin
geneorama@computer:~$ $PATH
bash: /sbin:/bin: No such file or directory
编辑:2021 年 1 月 12 日
最初我在 Jekyll 中遇到了错误。一些网站说我的错误是由 中的空格引起的$PATH
。当我(错误地)打印我的时$PATH
,我认为有东西试图添加我已删除的路径。我以为我错误地卸载了某些东西。
打印的空格是错误消息的一部分,而不是 的一部分$PATH
。
显然 Jekyll 已损坏,解决方法是apt remove
删除它然后重新安装。
在此过程中,我了解到路径变量可以通过许多不明显的方式进行修改。我的问题的答案本质上是“正确打印你的 $PATH”。
有一天,有人可能会问“如何调试/分析对我的 $PATH 的编辑?”,有人可能会将其标记为重复。它不是这个问题的重复。这个问题原来是“如何打印 $PATH”。
答案1
问题不在于你的PATH
,而在于你试图显示它的方式。命令行中的第一件事是您正在运行的命令。如果你只是输入$PATH
,shell 将尝试将您的PATH
作为命令运行,但它不是一个命令——它是一个冒号分隔的目录列表,用于在其中查找命令。由于没有该名称的实际命令,因此您会收到错误。(并且因为它正在寻找可执行文件文件对应于该命令,您收到的错误是“没有这样的文件或目录”)。
要正确显示 shell 变量的值PATH
,请使用 eg echo "$PATH"
(或者如果它可能包含反斜杠/转义符,则改用printf '%s\n' "$PATH"
)。有时可以省略变量引用周围的双引号,但并非总是如此,因此养成使用双引号括住变量引用的习惯更安全。我的意思是总是,而不仅仅是在echo
命令中。请参阅这里,这里, 和这里了解更多解释。
具体来说PATH
,如果将其分成单独的目录,通常更容易看到它;您可以使用命令tr
将冒号分隔符转换为换行符。比较以下两个示例:
$ echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
$ echo "$PATH" | tr ':' '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/local/games
/usr/games
答案2
您如何显示 $PATH?使用
echo $PATH
并且您不应该看到错误消息。如果您使用类似
ls $PATH
最后你会得到这样的错误。
您的 PATH 没有任何问题。但是目录字符串不是文件,如果您将其视为文件(尝试通过键入 $PATH 来执行它或尝试使用 ls $PATH 查看它,您将收到它不是文件的错误。