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命令的使用介绍