1. 程式人生 > >linux之管道| 和xargs的區別

linux之管道| 和xargs的區別

linux 任何一個命令都是呼叫了一個可執行的程式,比如說 ls -l, ls是一個可執行檔名,-l 是一個該程式執行時候的一個引數

管道和xargs的作用,舉個c程式來說如下:


  
  1. void main(int argc, char* argv[]){
  2. scanf();
  3. return;
  4. }

xargs的作用就是提供程式執行時的引數,就是將xargs傳遞到上述程式碼的char * argv[ ]
管道的作用就是將前面程式的的輸出放到後面程式的標準輸入快取區中,一旦後面的程式要用標準輸入scanf 讀取的時候就從該快取區中獲取內容,就是傳遞到上述的scanf()
所以什麼時候只用管道,什麼時候要加上xargs就是要判斷當前傳遞的東西究竟是作為一個執行時的引數( ps -aux,-aux就是執行時的引數了 ),還是隻是作為標準輸入提供給程式去處理(比如 grep )


參考部落格:http://www.cnblogs.com/wangqiguo/p/6464234.html


https://blog.csdn.net/w1300048671/article/details/71548860


ps: xargs其實本身也是一個程式,當執行引數中沒有程式名的時候,xargs會把內容直接輸出,不再傳遞
如:echo '123' |  xargs




補充解釋:

在一個目錄中有如下三個檔案

a.c b.c c.c

find . / -print命令會打印出三個檔名

find . / -print | grep a.c 只會打印出a.c這個檔案

如果只輸入命令grep a.c

那麼你在鍵盤中只輸入a.c字串時,a.c會被列印兩次,否則只打印你輸入的字元

如果要找三個檔案中,那個檔案包括有hello字元

find ./ -print | xargs grep hello

總結:管道符後不加xargs相當於先將xargs後面的命令回車執行一下再從鍵盤裡輸入

管道符前面命令執行的結果內容

加上xargs 相當於直接從鍵盤輸入管道符前面命令執行的結果內容再回車

再總結一下,就是回車的先後順序不太一樣。