再说linux命令行的管道
linux管道
linux命令上的管道大家想必是經(jīng)常用了 cat 1.txt | grep xxx; 這是常見的用法,說說管道,pipe是 liunx上常見的IPC方法,在 linux system programming 中有兩種,有名管道和無名管道,有名管道可以用在任意兩個進(jìn)程,而無名管道只能用在有親屬關(guān)系的進(jìn)程,如我們一般所寫的命令行就是無名管道(我猜是,不知道shell會怎么做,當(dāng)然可以不是:) )。管道是需要內(nèi)核來做一些維護(hù)工作的(無名管道顯然是進(jìn)程持續(xù)性,但有名管道是不是呢,記不清,請翻閱unix network programming :IPC, 我覺得應(yīng)該是,好像沒有必要搞得不一樣),進(jìn)程需要進(jìn)入內(nèi)核態(tài)中進(jìn)行讀取,所以編程中這不是一種快速的RPC,命令行就隨意了。
說遠(yuǎn)了,這里主要說命令行,重點是什么,既管道兩邊命令是屬于不同進(jìn)程空間的,那么這就意味的左邊的變量,是傳不到右邊的管道,或者右邊的管道,變量值不能給左邊,舉個例子:
下面展示一些 內(nèi)聯(lián)代碼片。
這里count會輸出test.txt的行數(shù)嗎?不會,只會輸出0,因為管道右邊的while已經(jīng)是子進(jìn)程了,count不是父進(jìn)程中的count.
再說一下其他的有趣問題。
下面展示一些 內(nèi)聯(lián)代碼片。
test.tx內(nèi)容如上,那么
// An highlighted block echo test.txt | cat這么做可以顯示test.txt的內(nèi)容嗎,其實不可以,因為管道做的內(nèi)容是將上一個命令的輸出作為下一個命令的標(biāo)準(zhǔn)輸入,所以,cat 獲得了標(biāo)準(zhǔn)輸入,而不是一個參數(shù),cat只能再如實的打印test.txt,這里應(yīng)該用xargs。
同時find -exec {} ; 也可以做類似的事。
總結(jié)
以上是生活随笔為你收集整理的再说linux命令行的管道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序算法(java实现)
- 下一篇: 【收藏】window、mac、linux