Bash 配置文件未获取来源

Bash 配置文件未获取来源

当我之前的命令成功时,我试图添加一个很酷的笑脸,如果命令在我的终端中不成功,我会添加愤怒的笑脸。

    21:26:30 user@mymachine:~ $ cat ~/.bash_profile
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3
alias pip=/usr/bin/pip3

highlightExitCode(){

    if [[ $? -eq 0 ]]; then
        echo -e '\xf0\x9f\x98\x8e ';
    else
        echo -e '\xf0\x9f\xa4\xa8 ';
    fi
}

export PS1="\[\033[1m\]\t\[\033[m\] \[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\] \$(highlightExitCode)\$ "

在我的 .bash_profile 中添加了此代码并尝试获取它。但出现这个错误。

21:30:45 user@mymachine:~ $ source ~/.bash_profile
-bash: /Users/user/.bash_profile: line 9: syntax error near unexpected token `then'
-bash: /Users/user/.bash_profile: line 9: `    if [[ $? -eq 0 ]]; then'

第 9 行是 if 条件。我尝试了多种删除方括号或“;”的组合但没有运气。我在这里缺少什么?

我正在运行 bash shell

21:30:46 user@mymachine:~ $ echo $0
-bash

答案1

您可以通过在包含 - 语句的行的开头插入一些不可见的控制字符(除回车符之外)来引发确切的错误if。如果您在终端中查看文件,则此类字符将显示为^X(对于某些大写字符)。Xcat -v

如果您编辑文件vim并轻松删除它,您可能可以找到该字符,或者您可以尝试简单地复制并粘贴上述问题中的文件以删除该字符。

该字符可能是通过意外点击Ctrl+V(粘贴?)然后其他一些控制序列插入的。某些编辑器(如vimvi)以及 shell 会在您首次按 时逐字插入以下字符Ctrl+V,从而允许您插入原始控制字符。

我没有太仔细地查看您的提示字符串,但您不需要将其导出,因为PS1它仅严格由当前 shell 使用。同样,您不需要导出,PATH因为它已经是一个环境变量(除非您unset之前已成功导出)。

PS1值还可以受益于单引号而不是双引号,并且您的转义序列存在一些问题,这些问题使 shell 无法跟踪提示的长度,但我还没有尝试弄清楚这可能是什么,但这可能与笑脸本身有关。

相关内容