gen*_*ama 3 command-line login environment-variables bashrc
今天我注意到我的路径 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,但这看起来很普通。我没有登录帮助中提到的任何其他文件。
有什么想法如何解决发生这种情况的问题吗?
根据评论,我编辑了问题以表示我已经检查过~.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
Run Code Online (Sandbox Code Playgroud)
我还注意到,我无法通过手动设置路径或以 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
Run Code Online (Sandbox Code Playgroud)
还查看了/etc/environment/和/etc/environment.d/。第一个是空的,第二个有两个文件90atk-adaptor.conf和90qt-a11y.conf,但它们似乎没有影响路径。
即使我手动将路径设置为公正/sbin,也会/bin收到错误。此时我不明白错误消息是否实际上在我的路径上或与路径一起打印。
geneorama@computer:~$ export PATH=/sbin:/bin
geneorama@computer:~$ $PATH
bash: /sbin:/bin: No such file or directory
Run Code Online (Sandbox Code Playgroud)
最初我在 Jekyll 中遇到了错误。有些网站说我的错误是由空格引起的$PATH。当我(不正确地)打印我的内容时,$PATH我认为有些东西正在尝试添加我已删除的路径。我以为我不正确地卸载了某些东西。
打印的空格是错误消息的一部分,而不是$PATH.
显然 Jekyll 已损坏,解决方案是修复apt remove然后重新安装。
一路上我了解到路径变量可以通过许多非显而易见的方式进行修改。我的问题的答案本质上是“正确打印你的 $PATH”。
有一天,有人可能会问“如何调试/配置文件编辑我的 $PATH?”,有人可能会将其标记为重复项。这不是这个问题的重复。这个问题原来是“如何打印$PATH”。
问题不在于你的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
Run Code Online (Sandbox Code Playgroud)