linux管道
linux命令上的管道大家想必是經常用了 cat 1.txt | grep xxx; 這是常見的用法,說說管道,pipe是 liunx上常見的IPC方法,在 linux system programming 中有兩種,有名管道和無名管道,有名管道可以用在任意兩個行程,而無名管道只能用在有親屬關系的行程,如我們一般所寫的命令列就是無名管道(我猜是,不知道shell會怎么做,當然可以不是:) ),管道是需要內核來做一些維護作業的(無名管道顯然是行程持續性,但有名管道是不是呢,記不清,請翻閱unix network programming :IPC, 我覺得應該是,好像沒有必要搞得不一樣),行程需要進入內核態中進行讀取,所以編程中這不是一種快速的RPC,命令列就隨意了,
說遠了,這里主要說命令列,重點是什么,既管道兩邊命令是屬于不同行程空間的,那么這就意味的左邊的變數,是傳不到右邊的管道,或者右邊的管道,變數值不能給左邊,舉個例子:
下面展示一些 行內代碼片,
// A code block
count =0
cat test.txt | while read lline
do
let count++
done
echo $count
這里count會輸出test.txt的行數嗎?不會,只會輸出0,因為管道右邊的while已經是子行程了,count不是父行程中的count.
再說一下其他的有趣問題,
下面展示一些 行內代碼片,
// An highlighted block
cat test.txt
this_is_test.txt
test.tx內容如上,那么
// An highlighted block
echo test.txt | cat
這么做可以顯示test.txt的內容嗎,其實不可以,因為管道做的內容是將上一個命令的輸出作為下一個命令的標準輸入,所以,cat 獲得了標準輸入,而不是一個引數,cat只能再如實的列印test.txt,這里應該用xargs,
同時find -exec {} ; 也可以做類似的事,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208429.html
標籤:其他
上一篇:詞根詞綴前綴總結(一)
下一篇:html登錄頁面學習
