我写了两个脚本。一个是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看起来有问题。怎么办?
答案 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
然后你可以按照你的方式使用管道。