Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash管道无法使用我的脚本_Linux_Bash_Shell - Fatal编程技术网

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
似乎正在做的一样。感谢您的解释。现在我明白了:)谢谢你的解释。现在我明白了:)