一直弄不懂,管道不就是把前一個命令的結果作為引數給下一個命令嗎,那在 | 後面加不加 xargs 有什麼區別
NewUserFF 寫道:
懶蝸牛 Gentoo 寫道:
管道是實現 “將前面的標準輸出作為後面的標準輸入”
xargs 是實現 “將標準輸入作為命令的引數”
你可以試試執行:
程式碼:
echo “–help”|cat
echo “–help”|xargs cat
看看結果的不同。
試過了,依然不是很確定的明白到底是什麼意思,自己再探索一下看看把
如果你直接在命令列輸入 cat 而不輸入其餘的任何東西,這時候的 cat 會等待標準輸入,因此你這時候可以
透過鍵盤輸入並按回車來讓 cat 讀取輸入,cat 會原樣返回。而如果你輸入–help,那麼 cat 程式會在標準輸出上
列印自己的幫助檔案。也就是說,管道符 | 所傳遞給程式的不是你簡單地在程式名後面輸入的引數,它們會被
程式內部的讀取功能如 scanf 和 gets 等接收,而 xargs 則是將內容作為普通的引數傳遞給程式,相當於你手寫了
cat –help
來自:http://forum.ubuntu.org.cn/viewtopic.php?t=354669
 
補充解釋:
在一個目錄中有如下三個檔案
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 相當於直接從鍵盤輸入管道符前面命令執行的結果內容再回車
再總結一下,就是回車的先後順序不太一樣。
 
 
 
文章來自網際網路部落格網站,版權歸作者所有。