Bash管道不能使用我的脚本

时间:2013-11-06 10:36:21

标签: linux bash shell

我写了两个脚本。一个是myscipt1.sh,它读取一个整数序列(作为参数提供)并报告最终数字:

[user@pc user] ./myscript1.sh 34 45 67 234
[user@pc user] 1200

在上面的示例中,脚本返回1200。 另一个脚本myscript2.sh接受一个字符串作为输入并返回一个整数序列:

[user@pc user] ./myscript2.sh a string to provide
[user@pc user] 364 465 786 34 22 1

我想通过传递myscript1.sh的结果来致电myscript2.sh,所以我尝试了:

[user@pc user] ./myscript2.sh my_string | ./myscript1.sh

但我没有运气,因为myscript1.sh(对传递的参数数量进行检查,没有传递任何参数)报告没有传递任何参数。

当我使用带有我编写的脚本的管道时,Bash看起来有问题。怎么办?

4 个答案:

答案 0 :(得分:2)

使用xargs

[user@pc user] ./myscript2.sh my_string | xargs ./myscript1.sh

答案 1 :(得分:2)

您可以将其运行为:

./myscript1.sh $(./myscript2.sh my_string)

答案 2 :(得分:2)

管道无法正常工作。

管道从程序/脚本获取输出,并将作为标准输入发送到另一个程序/脚本,不是作为命令行参数。例如,您可以使用readline来读取第一个程序中传输的数据。

你应该使用xargs(正如Joucks在我写作时所说:))。

答案 3 :(得分:1)

如果想要使用管道,那么重写你的脚本,以便他们希望他们的输入不作为参数,而是从stdin读取它:

input=$1  # old version

read input  # new version

然后你可以按照你的方式使用管道。