![Bash 配置文件未获取来源](https://linux22.com/image/197257/Bash%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%9C%AA%E8%8E%B7%E5%8F%96%E6%9D%A5%E6%BA%90.png)
当我之前的命令成功时,我试图添加一个很酷的笑脸,如果命令在我的终端中不成功,我会添加愤怒的笑脸。
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
(对于某些大写字符)。X
cat -v
如果您编辑文件vim
并轻松删除它,您可能可以找到该字符,或者您可以尝试简单地复制并粘贴上述问题中的文件以删除该字符。
该字符可能是通过意外点击Ctrl+V(粘贴?)然后其他一些控制序列插入的。某些编辑器(如vim
和vi
)以及 shell 会在您首次按 时逐字插入以下字符Ctrl+V,从而允许您插入原始控制字符。
我没有太仔细地查看您的提示字符串,但您不需要将其导出,因为PS1
它仅严格由当前 shell 使用。同样,您不需要导出,PATH
因为它已经是一个环境变量(除非您unset
之前已成功导出)。
该PS1
值还可以受益于单引号而不是双引号,并且您的转义序列存在一些问题,这些问题使 shell 无法跟踪提示的长度,但我还没有尝试弄清楚这可能是什么,但这可能与笑脸本身有关。