新bash shell打开时bash找不到函数
我在MacOS上。我最近升级到莫哈韦。我正在运行GNU bash的自制版本,版本4.4.23(1)-发行版(x86_64-apple-darwin17.5.0) 当我通过发出新bash shell打开时bash找不到函数,bash,Bash,我在MacOS上。我最近升级到莫哈韦。我正在运行GNU bash的自制版本,版本4.4.23(1)-发行版(x86_64-apple-darwin17.5.0) 当我通过发出bash命令打开一个新的bash shell时,每次发出新命令时都会出现以下错误: bash:parse\u git\u分支:未找到命令 错误是从my.bashrc文件中的以下行生成的,该文件使用git自定义我的命令行: export PS1=“\[\033[32m\]iMac5K@\[\033[33;1m\]\w:\[\0
bash
命令打开一个新的bash shell时,每次发出新命令时都会出现以下错误:
bash:parse\u git\u分支:未找到命令
错误是从my.bashrc
文件中的以下行生成的,该文件使用git自定义我的命令行:
export PS1=“\[\033[32m\]iMac5K@\[\033[33;1m\]\w:\[\033[m\]\[\033[33m\]\$(解析git分支)\[\033[00m\]”
(注意:我的.bashrc
文件来源于我的.bash\u配置文件
文件。)
parse\u git\u brach
在我的.bashrc
文件中,因此我不确定为什么会出现此错误。即使在手动编写.bashrc
源代码之后,我仍然会出现此错误
发出bash产生的:
/usr/local/bin/bash
谢谢。当您在没有-l
或-i
的情况下运行bash
时,它不会执行.bash\u profile
或.bashrc
本身,而是只执行通过环境接收的变量
当您导出变量时,您正在通过环境将其暴露给子进程
因此,您的子shell接收PS1定义,但它不接收PS1
所需的函数
您在这里有一些选择:
- 将函数与使用它的
PS1
定义一起导出。也就是说,Export-f parse\u git\u branch
。这有一个重要的警告,即只有读取导出函数(实际上是bash)的shell才能从该修复中获益
- 停止导出PS1。也就是说,只需将
export
从PS1='…'
行中删除即可
- 设置
BASH_ENV=$HOME/.bashrc
和ENV=$HOME/.bashrc
,这将指示即使是非交互shell也运行.bashrc
(当然,这可能会改变脚本的执行方式,因此有可能在其他软件中引起错误;此外,后者意味着您的。需要编写bashrc
,以确保非bash shell的安全)
好的,根据您的建议,现在一切正常,请不要导出PS1。
谢谢。如果OP正在运行bash
(而不是bash someScript
),则shell在默认情况下应该是交互式的,并且应该来源于.bashrc
。导出该函数不应该是必需的。嗯。除非stdout或stderr已重定向,否则您是对的——这意味着其中一个已被重定向(可能是通过tee
或类似的方式进行日志记录?)