Linux命令xargs及管道|的具体解释

管道|我们在Linux中很常见,那么他是什么作用?

  • 管道可以实现:将前面的标准输出作为后面命令的标准输入
  • 管道无法实现:将前面的标准输出作为后面命令的命令参数

这个时候,就要有请 xargs 这位护花使者了。xargs 所擅长的正是“将标准输入作为其指定命令的参数”。

这里我们举例来说明:
假设有一个在/WorkStation/目录下有一个文本arg.txt,里面的内容通过cat命令可以看到如下:

(base) benjamin@JieDev:~/WorkStation$ cat arg.txt 
aaa
bbb
ccc

同时在这个目录下我们也有一个sk.sh的脚本,其内容如下:

#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*

这个脚本如果执行的话,效果如下:

# 这里执行当前目录的脚本,加上了`./`,表明该脚本在当前目录下
# 更多关于脚本执行的细节:请参考 https://www.jianshu.com/p/ba6efda13e23
(base) benjamin@JieDev:~/WorkStation$ ./sk.sh -p -dsj -op 
-p -dsj -op

重点马上到来,我们先把命令给出来,随后做详细讲解

(base) benjamin@JieDev:~/WorkStation$ cat arg.txt |xargs -I {} ./sk.sh -p {} -j
-p aaa -j
-p bbb -j
-p ccc -j

下面进行讲解:
cat arg.txtarg.txt的内容输出,由于后面跟了管道|,所有内容被输入管道中,由于管道只能将其输出作为后面命令的标准输入,无法作为后面命令的命令参数,所以xargs才应用而生,他就是用来补齐管道的不足,将管道输出转换为命令参数,具体到本文,就是将arg.txt的内容转换成sk.sh脚本的命令(行)参数
那么xargs自身的命令参数-I是什么作用呢?官方解释如下:

-I R                              same as --replace=R
 -i, --replace[=R]                replace R in INITIAL-ARGS with names read
                                  from standard input; if R is unspecified,
                                  assume {}

意思是:利用xargs接收到并输出的每一个内容取代原始命令参数中的特定内容,原始命令参数xargs之后的命令,具体到本文就是sk.sh脚本,用arg.txt输出的每一个内容取代sk.sh后面命令参数中的{}内容
注意:

  • xargs的标准输入中出现的“换行符、空格、制表符”都将被空格取代;
  • -Ixargs结合使用,每一个参数命令都会被执行一次。

所以我们也可以从上面的返回结果看出,sk.sh命令被执行了3次,因为arg.txt有3字段的内容。

本文参考内容:

  • https://www.runoob.com/linux/linux-comm-xargs.html
  • http://c.biancheng.net/linux/xargs.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值