用错误的 PATH 破坏了我的终端
Broke my terminal with a bad PATH
我在 bashrc
中输入了无效路径,现在我的终端无法正常工作。我已经删除了我的 bash_profile
以及我的 bashrc
,但我仍然无法让它工作。
我在终端中使用的每个命令都会给我错误:
sh: parse_git_branch: command not found
这是我在 bash_profile
中用于 git 自动完成的东西。问题是一旦我使用 /bin/rm <file>
删除了文件,我就无法使用 source ~/.bash_profile
应用我的更改,因为它给我错误。我看过 , and ,但我仍然没有运气。
发生这样的问题后如何修复我的命令行?
您可以使用类似于以下的命令在当前会话中导出正确的 PATH:
export PATH=/usr/local/bin:/usr/bin:/bin
使用这个之后,你应该可以获取你的 bashrc。
对于当前 shell 会话的其余部分,您始终可以在命令行上直接更改路径:PATH="/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:"
导出 PATH 无法解决您的问题。它只会将 PATH 的值导出到子 shells/processes。这只会实现与命令行中的 resetting/changing PATH 变量相同的效果(如上所示),因为当您在其中工作时,您的范围仅限于当前 shell 进程(及其子进程) shell 环境(从命令行工作)。 如果您打开一个新终端(启动一个新登录 shell,这是一个父进程),bash 仍将尝试从资源文件中读取 ( .bash_profile 和 .bashrc), 不再存在 。
因此,我们需要能够扩大我们的范围并告诉 bash 我们希望对所有未来的 bashes 进行更改(shell 流程--新 shells,shells in shells,等等),而完成的方法是将这些语句写入资源文件。
一旦你在那里设置你的 PATH,每个 shell 会话都会产生这些资源(所有别名、命令、变量和存储在这些文件中的函数),加载,无论你是导出它还是不会,因为每个 shell 进程在执行任何其他操作之前总是会查询这些文件(因此它们有效地先发制人地导入您要导出的内容)。
bash 与任何其他脚本或程序一样。你拿走了它所有的输入、指针和快捷方式,现在它变得非常愚蠢,所以你必须明确你所做的一切,直到你可以教它在哪里寻找东西(给它一个搜索路径)并缩短与它的对话。
如果您没有 .bash_profile 的备份,您可以使用以下备份:
# This loads in the configuration in .bashrc
# Put all configuration in there!
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
这里有一个 .bashrc 可以帮助您入门:
export PATH="/bin:/sbin:/usr/local/bin:/usr/bin:/usr/sbin:"
我在 bashrc
中输入了无效路径,现在我的终端无法正常工作。我已经删除了我的 bash_profile
以及我的 bashrc
,但我仍然无法让它工作。
我在终端中使用的每个命令都会给我错误:
sh: parse_git_branch: command not found
这是我在 bash_profile
中用于 git 自动完成的东西。问题是一旦我使用 /bin/rm <file>
删除了文件,我就无法使用 source ~/.bash_profile
应用我的更改,因为它给我错误。我看过
发生这样的问题后如何修复我的命令行?
您可以使用类似于以下的命令在当前会话中导出正确的 PATH:
export PATH=/usr/local/bin:/usr/bin:/bin
使用这个之后,你应该可以获取你的 bashrc。
对于当前 shell 会话的其余部分,您始终可以在命令行上直接更改路径:PATH="/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:"
导出 PATH 无法解决您的问题。它只会将 PATH 的值导出到子 shells/processes。这只会实现与命令行中的 resetting/changing PATH 变量相同的效果(如上所示),因为当您在其中工作时,您的范围仅限于当前 shell 进程(及其子进程) shell 环境(从命令行工作)。 如果您打开一个新终端(启动一个新登录 shell,这是一个父进程),bash 仍将尝试从资源文件中读取 ( .bash_profile 和 .bashrc), 不再存在 。
因此,我们需要能够扩大我们的范围并告诉 bash 我们希望对所有未来的 bashes 进行更改(shell 流程--新 shells,shells in shells,等等),而完成的方法是将这些语句写入资源文件。
一旦你在那里设置你的 PATH,每个 shell 会话都会产生这些资源(所有别名、命令、变量和存储在这些文件中的函数),加载,无论你是导出它还是不会,因为每个 shell 进程在执行任何其他操作之前总是会查询这些文件(因此它们有效地先发制人地导入您要导出的内容)。
bash 与任何其他脚本或程序一样。你拿走了它所有的输入、指针和快捷方式,现在它变得非常愚蠢,所以你必须明确你所做的一切,直到你可以教它在哪里寻找东西(给它一个搜索路径)并缩短与它的对话。
如果您没有 .bash_profile 的备份,您可以使用以下备份:
# This loads in the configuration in .bashrc
# Put all configuration in there!
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
这里有一个 .bashrc 可以帮助您入门:
export PATH="/bin:/sbin:/usr/local/bin:/usr/bin:/usr/sbin:"