私の.zshrc
ファイルには、次のような「ハウスキーピング」というエイリアスがあります。
alias housekeeping="git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d"
このコマンドを実行すると、何らかの理由で次の出力が得られます。
error: The branch '12795-add-ship-info-to-FAQ' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 12795-add-ship-info-to-FAQ'.
error: branch '97167bb3f' not found.
error: branch '[origin/12795-add-ship-info-to-FAQ:' not found.
error: branch 'gone]' not found.
error: branch 'Edits' not found.
error: branch 'to' not found.
error: branch 'text' not found.
間違った議論を伝えているようです。
ただし、まったく同じコマンドをターミナルから直接実行すると、目的の結果が得られます。
私は何が間違っているのですか?
問題は、エイリアスの二重引用符の中$1
で、シェルの現在の最初の位置パラメータを参照していることです。おそらく設定されていないので、エイリアスはと同等です
alias housekeeping="... | awk '{print }' | xargs ..."
$1
空の文字列に展開された後。その結果、grep
ブランチ名だけでなく、の出力全体がに供給されますxargs
。これは、改行だけでなく空白を2つの引数を区切るものとして扱います。
正しいスクリプトawk '{print \$1}'
を確実にawk
取得するためにドル記号()をエスケープするか、さらに良いことに、引用符の余分な層を避けるためにエイリアスの代わりに関数を使用する必要があります。
housekeeping () {
git fetch -p && git branch -vv | awk '/: gone]/ {print $1}' | xargs git branch -d
}
スクリプトgrep
内の呼び出しをパターンに置き換えたことに注意してくださいawk
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加