病入膏肓

病入膏肓

当我修改路径变量时,我犯了一个错误,我输入了一个命令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效果,但这样做更容易出错,因为如果你忘记了加号,它会覆盖;如果你忘记了冒号,它会把最后添加的路径弄乱,因为新路径是它的子目录。

相关内容