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"
}