【发布时间】:2021-04-26 13:35:29
【问题描述】:
安装了 zsh,后来我尝试卸载,但它没有安装,所以我手动删除了文件夹/文件,之后我开始看到问题,所以每次我在终端中输入命令时,我都会看到 bash: parse_git_branch: command not found
我检查它表明我的默认 shell 是 bash(进入系统首选项->用户-)
我需要做什么才能恢复 bash?看起来我搞砸了外壳,如果我可以卸载并安装新的 bash,这可能吗?
我做了 brew uninstall bash 或 brew install bash
我收到这条消息:
brew卸载bash
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
bash: parse_git_branch: command not found
我尝试使用此命令将所有权更改为当前登录用户:执行以下命令后,我得到bash: parse_git_branch: command not found
sudo chown $USER /usr/local/bin/brew
这就是我的.bash_profile 的样子
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' }
export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ "
【问题讨论】:
-
您在右大括号之前缺少分号/换行符。是不是打错字了?
-
除了 oguz ismail 所说的,这本身很重要:你不应该导出你的
PS1。这样做会导致子进程继承它,但它们不会继承函数,因此它们会获得PS1值,但不会获得评估时所需的函数。 -
您可以使用
export -f parse_git_branch导出parse_git_bash函数,但即便如此,导出它的格式也只有同一个shell 才能保证正确解析和导入;两者都不导出更安全,而是要求它们都通过~/.bashrc或本地等效项定义(Apple 在所有新终端窗口使用.bash_profile时打破约定;按照标准约定,应该仅用于登录 shell - 即会话中的第一个 shell,所有其他 shell 都是子进程)。 -
无论如何——如果你想查看函数是否在你当前的shell中声明,你可以运行
declare -f parse_git_branch。如果它被声明,那将打印它的文本;如果没有,它会显示一个错误。可能因为语法错误(因为您在}之前缺少分号或换行符)而未声明它,或者可能因为您处于未导出到的子进程中而未声明它,但结束结果是一样的。 -
另外,对于交互式环境配置问题,请考虑我们的姊妹站点Unix & Linux。这不是特别与编程相关:您尝试调用的 particular 函数与 git 交互,但是从提示符中使用的 any 函数可能会出现问题,包括那些根本与开发无关的。