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