Pipe函数Pipe其实是进程间的通信工具,所以主要用在Linux命令中,方便两个命令之间的通信。管道符号管道符号(匿名管道)是Shell编程中经常使用的一种通信工具。管道符号是“|”,主要是将两个应用程序连接在一起,然后将第一个应用程序的输出作为第二个应用程序的输入。如果有第三个应用程序,则可以将第二个程序的输出作为第三个应用程序的输入,以此类推。比如ls|greptest.sh,过滤出当前文件中的test.sh文件:[root@lincoding/]#lsbindataetcliblost+foundnetoptrootselinuxsysusrbootdevhomelib64mediamntprocsbinsrvtest。shtmp[root@lincoding/]#ls|greptest.shtest.sh管道字符“|”将ls命令的文件列表输出到greptest.sh命令过滤文件。关于管道符号和分号管道符号还有一点需要注意。我们可以通过下面的命令观察到,在使用管道符号的时候,管道符号会为这两个命令生成子流程。[root@lincoding/]#猫|ps-fUIDPIDPPIDCSTIMETTYTIMECMDroot26272623014:57pts/000:00:00-bashroot880292627019:51pts/000:00:00catroot880302627019:51pts/000:00:00ps-f父进程bash的pid为2627,子进程cat的pid为88029,子进程ps-f的pid为88030由于管道符会生成子进程对于连接的命令,它不会影响当前环境。我们使用cd/home/|ls命令验证,运行结果如下:[root@lincoding/]#cd/home/|lsbindataetcliblost+foundnetoptrootselinuxsysusrbootdevhomelib64mediamntprocsbinsrvtest.shtmp[root@lincoding/]#pwd/从上面的运行结果我们可以知道命令如切换会影响当前环境的目录cd,使用管道符号后,不会影响当前环境。如果你使用分号“;”会发生什么?连接两个命令?[root@lincoding/]#cd/sys/;lsblockbusclassdevdevicesfirmwarefshypervisorkernelmodulepower[root@lincodingsys]#pwd/sys通过分号“;”可以知道连接,cd命令会对环境产生影响。小结分号和竖线都可以连接两个命令,但是它们的作用不同。分号实际上分隔了两个命令。第一个执行完之后,再执行第二个。这两个命令之间没有关系。管道符号的作用是将第一个执行命令的结果传递给第二个命令,同时为第一个和第二个命令创建一个子进程。由于该命令是在子进程中运行的,所以如果该命令带有开关,如cd目录的内置命令,则不会影响当前环境。所以在使用管道字符时,避免使用内置命令。
