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 シェルを実行しています。

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

ベストアンサー1

- ドアを含む行の先頭に一部の見えない制御文字(キャリッジリターンを除く)を挿入して、正確なエラーを発生させることができますif。端末でファイルを見ると、その文字は^X(一部の大文字の場合)として表示されます。Xcat -v

ファイルを編集しvimて削除すると、簡単に文字を見つけることができ、上記の質問から簡単にファイルをコピーして貼り付けて文字を削除してみることもできます。

文字はCtrl+V誤ってクリック(貼り付け?)してから、他の制御シーケンスを介して挿入された可能性があります。一部のエディタ(およびvimviとシェルでは、を最初に押すときに次の文字をそのまま挿入して、生の制御文字を挿入できますCtrl+V

プロンプト文字列を詳しく見たことはありませんが、PS1現在シェルでのみ厳密に使用されるため、エクスポートする必要はありません。繰り返しますが、PATHすでに環境変数なので、エクスポートする必要はありません(unset以前に正常にエクスポートしたことがない場合)。

二重引用符の代わりに一重引用符を使用すると、値にPS1利点を与える可能性があり、エスケープシーケンスにシェルがプロンプトの長さを追跡できないという問題がありますが、これが何であるかを理解しようとしませんでしたが、それはスマイリー自体に関連している可能性があります。

おすすめ記事