Linux Bash管道无法使用我的脚本
我写了两个剧本。一个是Linux Bash管道无法使用我的脚本,linux,bash,shell,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 我
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
我想通过传递myscript2.sh
的结果来调用myscript1.sh
,因此我尝试:
[user@pc user] ./myscript2.sh my_string | ./myscript1.sh
但是我运气不好,因为myscript1.sh
(它会检查传递的参数数量,如果没有传递参数,则退出)报告没有传递任何参数
当我将管道与我编写的脚本一起使用时,Bash似乎出现了问题。怎么做?使用xargs
[user@pc user] ./myscript2.sh my_string | xargs ./myscript1.sh
使用xargs
[user@pc user] ./myscript2.sh my_string | xargs ./myscript1.sh
您可以通过以下方式运行它:
./myscript1.sh $(./myscript2.sh my_string)
您可以通过以下方式运行它:
./myscript1.sh $(./myscript2.sh my_string)
管道不是那样工作的 管道从程序/脚本获取输出,并将其作为标准输入发送到另一个程序/脚本,而不是作为命令行参数。例如,您可以使用
readline
读取从第一个程序通过管道传输的数据
您应该使用
xargs
(正如Joucks在我写这篇文章时所说:)。管道不是这样工作的
管道从程序/脚本获取输出,并将其作为标准输入发送到另一个程序/脚本,而不是作为命令行参数。例如,您可以使用readline
读取从第一个程序通过管道传输的数据
您应该使用xargs
(正如Joucks在我写这篇文章时所说:)。如果您想使用管道,请重写您的脚本,使它们不希望输入作为参数,而是从stdin读取:
input=$1 # old version
read input # new version
然后,您可以像以前那样使用管道。如果您想使用管道,请重写脚本,使它们不希望输入作为参数,而是从stdin读取:
input=$1 # old version
read input # new version
然后您可以像以前那样使用管道。但是,一些命令,如
echo
和ls
可以在管道中使用。。。我不明白为什么…echo
和ls
可以写入标准输出,因此出现在管道的左侧。它们可以出现在管道的右侧,但由于它们不读取标准输入,因此它们会忽略从管道接收到的任何内容,就像myscript1.sh
似乎正在执行的操作一样。但是一些命令,如echo
和ls
可以在管道中使用。。。我不明白为什么…echo
和ls
可以写入标准输出,因此出现在管道的左侧。它们可以出现在管道的右侧,但由于它们不读取标准输入,因此它们会忽略从管道接收到的任何内容,就像myscript1.sh
似乎正在做的一样。感谢您的解释。现在我明白了:)谢谢你的解释。现在我明白了:)