Bash の grom() キーワードが予期しない「(」表示を発生させます。

Bash の grom() キーワードが予期しない「(」表示を発生させます。

私のプログラムでエラーが発生する理由は完全にわかりません。.bash_profile

syntax error near unexpected token `('

grom()私の機能でキーワードを使用するとき。私のマスターブランチをオリジナルに自動リセットするbash機能を作りたいです。

# git status
alias gs='git status'

# git stash list
alias gsl='git stash list'  

grom() {
  branch_name="$(git symbolic-ref --short -q HEAD)"
  git fetch && git rebase origin/master && git checkout master && git rebase origin/master && git checkout $branch_name
}

# git stash apply. must append stash@{num}
alias gsa="git stash apply"

関数名を変更すると正常にコンパイルされます。キーワードが見つからないので、grom何が問題なのかわかりません。関数名を似たようなものに変更したり、同様のものに変更したりするgit-romとうまくgromsコンパイルされます。動作しない特別なキーワードはありますか?これはMac OS Xにあります。

答え1

bash次のように宣言すると、より良い幸運を享受できます。

function grom() { … }

(ノート:function 動作しません厳格なPOSIXシェルではdash! )


@八月この回答を編集することで、これはエイリアスの競合(またはそうではないが何らかの方法で定義された組み込み関数)が原因であることが示唆されます。

予約語機能競合をプリエンプトするようにロード順序を変更するか(関数定義中にエイリアスが拡張される)、bashを無効にして問題を回避します。POSIXモード(これにより、組み込み関数をオーバーライドできます。)

bash(1)マニュアルページから:

関数定義自体が複合コマンドであるため、関数が実行されるのではなく、関数定義を読み取るとエイリアスが拡張されます。したがって、関数で定義されたエイリアスは、関数が実行された後にのみ使用できます。

エイリアスが競合している場合は、ソーシング前に以前の実験を削除してみることunalias gromができます(衝突するエイリアスをまだ定義していない限り、このファイルに追加する必要はありません)。.bash_profileまたは、新しい端末を起動して再起動してください。

関連情報