2012-03-07 109 views
1

我有下面的内容:bash脚本和管道

for VAR 
do 
    echo file found $VAR 
done 

我要的是它打印所有包含扩展名为.png文件。我期望以下命令行工作,但它不。为什么?

ls *.png | myscript.sh 

./myscript.sh < `ls *.png` 
+0

循环的conten变量的ts与将命令的结果输送到另一个命令不同。 'ls'的结果将作为myscript.sh的标准输入,而不是变量。 – 2012-03-07 18:37:38

+0

你将如何修改我的脚本来循环标准输入? – Pomario 2012-03-07 18:44:36

+0

第二次调用语法错误:它将找到的第一个文件的内容重定向到您的脚本。 – Basilevs 2012-03-07 18:48:30

回答

3

您需要xargs

ls *.png | xargs myscript.sh

+0

它确实为我工作。 – xato 2012-03-07 18:44:50

+0

你的命令不适合我。我在这里错过了什么吗? – Pomario 2012-03-07 18:45:48

+0

尝试'[..] | xargs。/ myscript.sh',如果scritpt不在你的'PATH'中。 – xato 2012-03-07 18:47:21

3

读取标准输入脚本应该是这样的:

while read line; do 
    echo file found $line 
done 
+0

编辑删除括号:原始答案将不起作用,因为括号会导致读取命令发生在子外壳中,因此当子shell退出时变量将消失。 – 2012-03-07 19:10:35