我对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发布于 2019-11-07 21:00:29
必须在命令字符串之外定义位置参数:
echo a b c d | xargs -I VALUES sh -c "echo \$4 \$3 \$2 \$1" command VALUES这不是很好的描述(在我的例子中来自man dash )
-c从command_string操作数读取命令,而不是从标准输入读取命令。特殊参数0将从command_name操作数和位置参数($1、$2等)中设置。从remaining参数操作数设置。
但行为类似于在man bash中更好地解释:
如果存在-c选项,则从第一个非选项参数command_string读取命令。如果命令字符串后面有arguments,则第一个参数分配给$0,其余的参数<#>are分配给位置参数。赋值为$0设置shell的名称,该名称用于警告和错误消息。
注意,command_string是在引号(=$0)命令字符串之后设置的第一个参数。
在您的示例中,您使用了不带参数的-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 '{}'提示:使用来自sh的D14选项和来自xargs的-t选项,可以更好地跟踪奇怪的行为。在执行命令行之前,他们将打印每个命令行。
https://unix.stackexchange.com/questions/551001
复制相似问题