適切なエスケープはエイリアスを生成します。

適切なエスケープはエイリアスを生成します。
alias wp='watch -d --interval 1 "oc get pods | grep 0/1 | grep -v Completed | awk {'print \$1,\$2,\$3,\$4'} | column -t "'

このコマンドを避けようとしています。 \を使用して印刷引用符をエスケープしようとしましたが、成功しませんでした。どんなアイデアがありますか?

ありがとうございます。

答え1

これは本当に難しい質問です。問題は、'内部に終了エイリアスを定義できないことです。だから"コマンドが必要ですawk。次に、flagを「消費」できるすべての項目に対して1段階エスケープが必要です$。ここで"awk に対して 1 回、"ユーザーが提供したコマンドに対して 1 回、watchシェル自体に対して 3 番目をエスケープする必要があります。これは働きます:

alias wp='watch -d --interval 1 "oc get pods | grep 0/1 | grep -v Completed | awk \"{print \\\$1,\\\$2,\\\$3,\\\$4}\" | column -t"'

私があなたなら、エイリアスの代わりに関数を使って構文を少し単純化します。

wp(){
    command1='oc get pods | grep 0/1 | grep -v Completed'
    command2='awk "{print \$1,\$2,\$3,\$4}" | column -t'

    watch -d --interval 1 "$command1 | $command2"
}

grep最後に、すでに以下を使用している場合は、次の点に注意してくださいawk

 wp(){
  command="oc get pods | awk '/0\/1/ && !/Completed/{print \$1,\$2,\$3,\$4}' | column -t"
  watch -d --interval 1 "$command"
}

関連情報