• 通道符和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的作用,将标准输出转为命令的参数,而不是命令的处理内容。

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/litifeng/p/6962179.html
Copyright © 2020-2023  润新知