【问题标题】:bash redirecting stdin to scriptbash 将标准输入重定向到脚本
【发布时间】:2016-05-31 15:00:45
【问题描述】:

我浏览了一些 bash i/o 教程,但其中大多数都涉及将流重定向到文件/从文件重定向。

我的问题如下:如何将 stdin/stdout/stderr 重定向到脚本(或程序)。

例如,我有脚本“parentScript.sh”。在那个脚本中,我想调用黑盒“childScript.sh”,它需要很少的参数 -arg1 -arg2 ...并从标准输入读取输入。

我的目标是在 parentScript.sh 中为 childScript.sh 提供一些输入:

...
childScript.sh -arg1 -arg2
????? < "input1"
????? < "input2"
...

另一种情况是我调用了几个程序,我希望它们像这样相互交谈:

...
program1 -arg1 -arg2
program2 -arg1 -arg9
(program1 > program2)
(program2 > program1)
etc...
...

这两种情况如何解决?谢谢

编辑: 更具体。我想制作自己的管道(命名或未命名)并使用它们连接多个程序或脚本,以便它们相互通信。

例如:program1 写入 program2 和 program3 并从 program2 接收。程序 2 写入程序 1 和程序 3 并从程序 1 接收。 program3 只接收表单 program1 和 program2。

【问题讨论】:

  • 现在,这可以说是过于宽泛了。许多用于程序化管道构建的技术(例如递归函数执行组件)是否适用取决于您未提供的详细信息。 [此外,在已经提供答案之后以显着改变其含义的方式“澄清”一个问题并不是特别好的形式,因为它使那些先前的答案毫无用处]。
  • 好点。我会做新的线程
  • ????? &lt; "input1" 这行到底应该做什么?也许人们不理解您的问题的部分原因是您希望我们从极其不清楚的伪代码中直觉您的意图。
  • 意思是??????是指向被调用脚本的东西,比如文件描述符

标签: bash redirect pipe file-descriptor


【解决方案1】:

管道|是你的朋友:

./script1.sh | ./script2.sh

将标准输出从script1.sh 发送到script2.sh。如果你也想发送标准错误:

./script1.sh 2>&1 | ./script2.sh

而且只有标准错误:

./script1.sh 2>&1 >/dev/null | ./script2.sh

您也可以在这里制作文档:

./script2.sh << MARKER
this is stdin for script2.sh.
Variable expansions work here $abc
multiply lines works.
MARKER

./script2.sh << 'MARKER'
this is stdin for script2.sh.
Variable expansions does *not* work here
$abc is literal
MARKER

MARKER 几乎可以是任何东西:EOF!hello、... 不过要注意的是,结束标记前不能有任何空格/制表符。

在 bash 中,您甚至可以使用 &lt;&lt;&lt;,它的工作原理与此处的文档非常相似,如果有人能澄清,将不胜感激:

./script2.sh <<< "this is stdin for script2.sh"
./script2.sh <<< 'this is stdin for script2.sh'

【讨论】:

    【解决方案2】:

    您可以使用 HEREDOC 语法,例如:

    childScript.sh -arg1 -arg2 <<EOT
    input1
    EOT
    
    childScript.sh -arg1 -arg2 <<EOT
    input2
    EOT
    

    并通过管道将第一个脚本的输出转发到第二个脚本的输入:

    program1 -arg1 -arg2 | program2 -arg1 -arg9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多