如何指定管道的参数输出作为脚本的输入?

时间:2017-05-17 11:16:01

标签: bash shell

如何指定管道参数作为我愿意运行的脚本的输入?

例如,我尝试过这个命令:

ls -1U | grep "txt" | ./my script.bash 

...但管道输出之后的输出预计会以:

运行
./myscript.bash a.txt

./myscript.bash b.txt

......等等。

有谁能告诉我如何在这里指定参数?

2 个答案:

答案 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)