位置パラメータの渡し

位置パラメータの渡し

私はxargsに初めて触れました。

コマンドがあります。

kubectl taint nodes xx.xx.xx.xx dedicated=test:NoSchedule --overwrite=true

コマンドがあります。位置値をxargsにどのように渡すことができますか?合格していません。

echo \$NODES \$key_and_value \$overwrite \$label  |
  xargs -I -l % sh -c 'kubectl taint nodes  \$0 % \$1 --overwrite=\$2'

基本的に私はこのようなことをしています。 Jenkins UIからこの値を取得します。この値は動的です。

echo \$NODES \$key_and_value \$overwrite  |
  xargs -I% bash -c 'kubectl --kubeconfig ./kube-configs/config \
  taint nodes % "\$0"  "\$1" --overwrite=% "\$2"'`

間違い:

16:06:42 Error: invalid argument "ip-xx-xx-xx-xx.ec2.internal" for "--overwrite" flag: strconv.ParseBool: parsing "ip-xx-xx-xx-xx.ec2.internal": invalid syntax

ベストアンサー1

コマンド文字列の外側に位置パラメータを定義する必要があります。

 echo a b c d  | xargs -I VALUES sh -c "echo \$4 \$3 \$2 \$1" command VALUES

これはよく説明されていません(私の場合man dash

-氏

標準入力の代わりに command_string オペランドからコマンドを読み込みます。特殊パラメータ0は、command_nameオペランド、位置パラメータ($ 1、$ 2など)で設定されます。残りのパラメータオペランド

ただし、動作はよりよく説明されていますman bash

-氏

-cオプションがある場合は、オプションではなく最初の引数command_stringからコマンドを読み取ります。もしあればcommand_stringの後のパラメータ、最初の引数は$ 0に割り当てられ、残りの引数は位置パラメータで指定。 $ 0の指定は、警告メッセージとエラーメッセージに使用されるシェルの名前を設定します。

$0command_stringは、引用符(=)で囲まれたコマンド文字列の後の最初の引数に設定されます。

あなたの場合、パラメータ-Iなしでオプションを使用しました。これは、xargs読み取った値を追加するだけでなく、呼び出しを介して渡す必要があることを意味します'{}'。したがって、次のいずれかを使用してください。

 echo 1 2 3 4 | xargs sh -c "echo \$4 \$3 \$2 \$1" command

またはこれ

 echo 1 2 3 4 | xargs -I sh -c "echo \$4 \$3 \$2 \$1" command '{}'

ヒント:奇妙な動作をよりよく追跡するには、-xオプションfromsh-tオプションfromを使用してください。xargs実行前に各コマンドラインを印刷します。

おすすめ記事