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