如何指定管道参数作为我愿意运行的脚本的输入?
例如,我尝试过这个命令:
ls -1U | grep "txt" | ./my script.bash
...但管道输出之后的输出预计会以:
运行./myscript.bash a.txt
./myscript.bash b.txt
......等等。
有谁能告诉我如何在这里指定参数?
答案 0 :(得分:2)
您可以在当前命令中使用xargs
:
ls -1U | grep txt | xargs -n 1 ./my_script.bash
但是,最好的解决方案是用find
替换整个命令:
find . -name '*.txt' -exec ./my_script.bash {} \;
这样做更好,因为它避免解析ls
的输出,这是一个容易出错的过程。
在这两种情况下,./my_script.bash
命令都会按记录执行一次。如果您可以并且想要使用多个文件作为参数调用脚本,请从-n 1
执行中删除xargs
或将\;
执行的find
替换为{{1} }}
答案 1 :(得分:0)
<强>案例1。不依赖外部程序
for filename in *.txt;do
./my_script.bash "$filename"
done
<强>情况2。子进程(子shell)
中存在管道:变量文件名的使用ls -1U | grep txt | while read filename;do
./my_script.bash "$filename"
done
<强>情形3。管道:变量 filename 的使用存在于当前进程
中while read filename;do
./my_script.bash "$filename"
done < <(ls -1U | grep txt)