zoukankan      html  css  js  c++  java
  • 通道符和xargs命令

    通道符“|“:是将前一个命令的输出做为后一个命令的标准输入。注意:这里的标准输入指的是:通道符右侧命令的处理内容,也就是说左侧的标准输出不能作为右侧命令的参数,只能作为命令的处理对象。

    简单讲:只有通道符时,右侧命令将左侧输出作为处理内容。加上xargs后,将左侧输出作为参数。具体看下面wc命令的执行,就明白了。

    写起来都很别扭,理解起来也费劲啊,还是举例子吧:

    1、环境:假设当前目录下,tesy文件夹内有3个文件,t1.c,t2.c,t3.c

    t1.c内容:

    hello,I am t1

    ok

    t2.c内容:

    this is t2

    t3.c内容:

    I am t3

    I have 3 lines

    look it

    然后,我再当前目录建立一个文件t,内容如下:

    t1.c

    t2.c

    t3.c

    最后,我在当前目录执行: cat t | ls -l 

    [root@noi ~]# cat t | ls -l
    total 8
    -rw-r--r-- 1 root root   30 Jun  8 12:11 t
    drwxr-xr-x 2 root root 4096 Jun  8 12:10 tesy

    也输出了内容,和我们的想法不一样,我们想的是将t文件内的文件列表传给ls命令,然后一一列出详细属性。但是显然输出的不对,那么这些到底是怎么运作的呢?

    cat t命令产生的标准输出通过通道符传给了ls命令,但是ls命令抛弃了,因为ls命令不能处理流,它不是一个文本处理软件,然后ls独自运行,因为没有参数,所以最终执行的命令是:

    ls -l

    就将当前目录作为默认参数,显示出来。

    然后运行:

    cat t | xagrs ls -l
    [root@noi ~]# cat t | xargs ls -l
    -rw-r--r-- 1 root root 18 Jun  8 12:10 tesy/t1.c
    -rw-r--r-- 1 root root 11 Jun  8 12:09 tesy/t2.c
    -rw-r--r-- 1 root root 31 Jun  8 12:09 tesy/t3.c

    看到没?正确执行了我们的意图。xargs命令将从cat t得到的标准输出,作为参数传递给ls命令,这样ls命令得到3个参数,最终执行: ls -l t1.c t2.c t3.c 

    2、如果上题还有疑问,那么wc命令将最终为您解惑:

    执行:

    cat t | wc -l

    wc命令将cat的输出作为处理内容,进行计算,最终输出3,表示有3行。

    [root@noi ~]# cat t | wc -l
    3

    执行:

    cat t | xargs wc -l

    xargs将cat输出的3行作为wc的参数传递进来,于是最终执行: wc -l t1.c t2.c t3.c 

    [root@noi ~]# cat t | xargs wc -l
     2 tesy/t1.c
     1 tesy/t2.c
     3 tesy/t3.c
     6 total

    看到没?wc最终计算的是t1.c,t2.c,t3.c这三个文件,而不是t文件。这就是xargs的作用,将标准输出转为命令的参数,而不是命令的处理内容。

  • 相关阅读:
    图片上下左右居中
    点击滚动指定高度 屏幕滚动事件
    实例16 验证登录信息的合法性
    实例15 判断某一年是否为闰年
    实例14 实现两个变量的互换(不借助第3个变量)
    实例13 不用乘法运算符实现2*16
    实例12 用三元运算符判断奇数和偶数
    实例11 加密可以这样简单(位运算)
    实例10 自动类型转换与强制类型转换
    实例9 重定向输入流实现程序日志
  • 原文地址:https://www.cnblogs.com/litifeng/p/6962179.html
Copyright © 2011-2022 走看看