コマンドの断片のインライン拡張を作成する最良の方法を見つけようとしています。 「長い形式」は次のとおりです。
kubectl get pods --show-labels
または
kubectl get po -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata. ownerReferences[0].kind}'
まず、以下を使用しました。
function sl(){
echo " --show-labels"
}
kubectl get pods `sl`
これは機能しますが、以下は機能しません。
function kown(){
echo "custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'"
}
kubectl get po -o `kown`
error: unexpected path string, expected a 'name1.name2' or '.name1.name2' or '{name1.name2}' or '{.name1.name2}'
2番目はなぜ機能しないのですか?バックティックと関数に加えてより良い方法がありますか?環境変数について考えていましたが、わかりませんでした。どんなアイデアもありがとうございます。
答え1
zsh
まず、使いやすくなります。グローバルエイリアスこの種の場合:
alias -g sl='--show-labels'
alias -g kown='custom-columns=NAME:{.metadata.name},OWNER:{.metadata.ownerReferences[0].name},OWNER_KIND:{.metadata. ownerReferences[0].kind}'
'
第二に、一重引用符を使用する場合'
~へ "
二重引用符"
、次に一重引用符文字通り文字列からコマンドに渡します。それはあなたが望むものではありません。元のコマンドラインの一重引用符は、シェルが次のことを防止するためのものです。拡張文字列の複数の部分文字列について。私が梱包した方法を参照してくださいみんな一重引用符で囲まれた文字列。これにより、シェルが文字列の任意の場所から文字列を拡張するのを防ぐことができます。これは、一部の部分文字列を引用するよりもはるかに安全で、入力も少なくなります。
最後に、コマンドラインの任意の場所に入力するだけでグローバルエイリアスを使用できます。いいえ引用符:
% kubectl get pods sl
% kubectl get po -o kown
注:
%
これは通知です。そんなことは入力しないでください。