# 我当前的目录下有一个 test.txt 文件 bash 执行以下命令无效
ls | grep tes | cat
echo 'bHMK' | base64 -d | bash
# bHMK 是 'ls' 的 base64 编码实在搞不明白这个参数传递,为什么上面无效,ls 的结果作为 grep 的参数,然后结果再作为 cat 的参数,逻辑上没什么问题,但就是没有用
可以看下cat的命令说明。cat不加参数的时候,是Copy standard input to standard output.,也就是拷贝标准输入到标准输出。
从|输入的信息,对cat来说是标准输入,所以最后输出 test.txt 没毛病。
要是想输出文件内容,可以这样: ls | grep "xxxx" | xargs cat
2 回答713 阅读✓ 已解决
3 回答784 阅读
1 回答770 阅读
2 回答722 阅读
1 回答668 阅读
1 回答612 阅读
1 回答554 阅读
|是管道符,代表前一个命令的标准输出会作为后一个命令的标准输入传入,根本不是你所理解的传递参数。担心文件名有特殊字符你可以改为更安全的方案:find中使用
-print0参数将换行符改为零字符\0输出,xargs的-0参数代表使用\0做参数分隔符,而不是shell默认的IFS。加上-r/--no-run-if-empty参数可以在没有标准输出的时候不运行后面的命令