【问题标题】:How to echo to running process in shell?如何在shell中回显正在运行的进程?
【发布时间】:2013-10-02 02:32:07
【问题描述】:

如果我有一个 C++ 程序需要在运行时从控制台输入 cin,我该如何从 shell 脚本自动输入这个输入?我还需要将其输出存储在一个文件中,但这部分很简单。我研究了不同的方法,包括将其回显到 /proc 中 pid 的文件描述符,但似乎没有任何效果。

这是我目前所拥有的:

#!/bin/sh
g++ -o runme source.cpp
echo <<EOT | ./runme > output
expected program input
more expected program input
even more
EOT

请注意,每行输入都需要程序中的 cin 读取“输入按键”,我假设这应该发生,因为脚本中的程序输入由换行符分隔。在这里,程序被执行,但无论我在 EOT 之前放置了什么,都会在文件中产生相同的输出,因此它没有按预期输入到程序的 cin 中。

【问题讨论】:

    标签: bash shell process


    【解决方案1】:

    你想要的 I/O 重定向形式称为here document,完全不涉及echo

    ./runme <<EOF
    expected program input
    more expected program input
    even more
    EOF
    

    带输出重定向:

    ./runme <<EOF > output
    expected program input
    more expected program input
    even more
    EOF
    

    如果你坚持使用echo,原则上你可以这样做:

    echo -e "expected program input\nmoreexpected program input\neven more\n" | ./runme
    

    -e 选项可以解释反斜杠转义,例如\necho 的参数中指示的换行符。

    【讨论】:

      【解决方案2】:

      仅供参考,echo 不会从其标准输入中读取(此处文档提供);你会想改用cat

      cat <<EOF | ./runme > output
      ...
      ...
      ...
      EOF
      

      但这是cat的无用用法,因为您可以直接将here文档连接到runme的标准输入,如Thomas Nyman's answer所示。

      【讨论】:

        猜你喜欢
        • 2010-09-17
        • 1970-01-01
        • 2020-03-23
        • 2017-04-30
        • 1970-01-01
        • 2012-09-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多