首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递位置参数

传递位置参数
EN

Unix & Linux用户
提问于 2019-11-07 20:33:47
回答 1查看 531关注 0票数 0

我对xargs很陌生

我有个命令

代码语言:javascript
复制
kubectl taint nodes xx.xx.xx.xx dedicated=test:NoSchedule --overwrite=true

我有我的命令,我如何将位置值传递给xargs?他们不会通过的。

代码语言:javascript
复制
echo \$NODES \$key_and_value \$overwrite \$label  |
  xargs -I -l % sh -c 'kubectl taint nodes  \$0 % \$1 --overwrite=\$2'

基本上,我是这样做的,我从jenkins ui中获得了这些值--值是动态的

代码语言:javascript
复制
echo \$NODES \$key_and_value \$overwrite  |
  xargs -I% bash -c 'kubectl --kubeconfig ./kube-configs/config \
  taint nodes % "\$0"  "\$1" --overwrite=% "\$2"'`

错误:

代码语言:javascript
复制
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
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-11-07 21:00:29

必须在命令字符串之外定义位置参数:

代码语言:javascript
复制
 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读取的值不仅是附加的,而且需要通过'{}'调用。所以要么使用这个:

代码语言:javascript
复制
 echo 1 2 3 4 | xargs sh -c "echo \$4 \$3 \$2 \$1" command

或者这个

代码语言:javascript
复制
 echo 1 2 3 4 | xargs -I sh -c "echo \$4 \$3 \$2 \$1" command '{}'

提示:使用来自shD14选项和来自xargs-t选项,可以更好地跟踪奇怪的行为。在执行命令行之前,他们将打印每个命令行。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/551001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档