Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新bash shell打开时bash找不到函数_Bash - Fatal编程技术网

新bash shell打开时bash找不到函数

新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

我在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:\[\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
或类似的方式进行日志记录?)