当我修改路径变量时,我犯了一个错误,我输入了一个命令source ~/.profile
,然后每次打开终端时总是没有任何回显,就像运行某个程序一样,只显示图片的上半部分,我必须使用“ctrl+C”来停止它,然后终端将恢复并回显“user:path$”。即使我重新启动计算机也不起作用。我该如何恢复我的电脑?
当我这样做时,就会发生以下情况bash -x ~/.profile
-paste.ubuntu.com/23347084
答案1
我已根据您的信息解决了该问题。
发生的事情是:Bash 去执行.bashrc
,它会获取.profile
。.profile
然后获取.bashrc
,这会创建一个递归循环。
source .profile
您可以从末尾删除该行.bashrc
,这样就可以解决问题。
答案2
Bash 有一种很好的方法来匹配和删除变量和数组中的字符串。
Path_to_remove="~/.profile"
PATH=${PATH//:${Path_to_remove}/}
注意,以上内容假设您已将其附加或添加到路径变量中,如果您已覆盖它,那么获取用户 bashrc 文件也会有所帮助。
source ~/.bashrc
或者使用 reset 重置当前终端
reset
如果您已将二进制文件导入终端,则上面的注释确实很有用。
編輯
根据您的评论,听起来您可能已经覆盖了路径变量。
下次,在弄乱它之前,先备份它
备份选项一(到文件)
echo "${PATH}" | tee -a /tmp/path.bak
备用方案二(临时)
Old_path="${PATH}"
然后进行更改,并了解可以通过以下示例恢复路径
PATH=$(cat /tmp/path.bak)
## or for option two
PATH=${Old_path}
最后了解路径如何分隔不同的目录路径,提示:
冒号。以及大多数软件安装可执行文件和/或系统链接的位置;下面是我新 chroot 文件系统中的一个列表。
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
请注意,以上内容是通过以下格式格式化的,并且不是回显时路径的呈现方式。
for _path in ${PATH//:/ }; do echo "${_path}"; done
有了上述内容,我们现在可以重建路径变量了。注意不是运行以下命令,无需先备份当前路径变量。
PATH=/bin
## Add further paths using the following syntax
PATH=${PATH}:/sbin
PATH=${PATH}:/usr/bin
PATH=${PATH}:/usr/sbin
PATH=${PATH}:/usr/local/bin
PATH=${PATH}:/usr/local/sbin
请注意,上面除了第一个用法之外的所有用法都是
${PATH}:
为了确保你没有覆盖而是附加到其预先存在的值。+=
例如,使用 可以实现相同的PATH+=:/sbin
效果,但这样做更容易出错,因为如果你忘记了加号,它会覆盖;如果你忘记了冒号,它会把最后添加的路径弄乱,因为新路径是它的子目录。