# 我当前的目录下有一个 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
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答799 阅读✓ 已解决
2 回答3.2k 阅读
|
是管道符,代表前一个命令的标准输出会作为后一个命令的标准输入传入,根本不是你所理解的传递参数。担心文件名有特殊字符你可以改为更安全的方案:find中使用
-print0
参数将换行符改为零字符\0
输出,xargs的-0
参数代表使用\0
做参数分隔符,而不是shell默认的IFS
。加上-r/--no-run-if-empty
参数可以在没有标准输出的时候不运行后面的命令