私は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の指定は、警告メッセージとエラーメッセージに使用されるシェルの名前を設定します。
$0
command_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
実行前に各コマンドラインを印刷します。