linux命令可以從命令行參數或標準輸入讀取要處理的內容,例如cat和grep命令:
echo 'Hello world' | cat test.php
echo 'Hello world' | 會通過管道將標準輸出'Hello world'導入到 cat 的標準輸入,但cat不會從它的標準輸入中讀入要處理的內容,而是輸出test.php的內容,如果test.php不存在則cat命令報告該文件不存在。因為基本上linux的命令是先從命令行參數中獲取參數,然后從標準輸入中讀取,如:
echo 'Hello world' | cat
這條命令會輸出 'Hello world' 字符串。
Linux中很多程序是不處理標準輸入的,例如 kill , rm 這些命令如果命令行參數中沒有指定要處理的內容,則不會默認從標準輸入中讀取:
echo '8521' | kill
這條命里是不能執行的。
但是有時候我們的腳本需要 echo '8521' | kill 這樣的效果,篩選出符合某條件的進程pid然后結束。有下面這幾種解決辦法:
1.
kill `ps -ef | grep 'rabbitmq'`
這種形式實際上是拼接字符串得到的命令,其效果類似于 kill $pid。
2.
for procid in $(ps -aux | grep "rabbitmq" | awk '{print $2}'); do kill -9 $procid; done
與上一個類似,區別在于循環的kill掉多個進程。
3.
ps -ef | grep 'rabbitmq' | xargs kill
xargs命令可以通過管道接受字符串,并將接收到的字符串通過空格分割成許多參數,然后將參數傳遞給其后面的命令,作為后面命令的命令行參數
xargs與管道的區別:
echo '--help' | cat
輸出:
–help
echo '--help' | xargs cat
輸出cat命令的使用介紹