【问题标题】:Piping input to a shell command and keeping the created shell alive管道输入到 shell 命令并保持创建的 shell 活动
【发布时间】:2012-09-18 02:21:54
【问题描述】:

我的首要程序是一个 shell 脚本。这个 shell 脚本调用了一个 C 程序,我需要将输入传递给它,最终 C 程序将创建一个 shell。

但是,当我将输入通过管道传输到 shell 脚本中的 C 程序时

Do_Other_Stuff
./my_prog < file1

我无法让外壳保持活力。只是跑步,

Do_Other_Stuff
./my_prog

有效,因为我必须自己输入标准输入,并且当 my_prog 退出时,shell 会正确生成。我很确定将 ./my_prog 调用包装在 C 程序中,然后编译和运行它会起作用,但我很好奇 shell 是否有更清洁的方法。

我尝试了几种在不同情况下使用cat file1 | ./my_prog&amp;的组合,但都没有成功。

谢谢!

【问题讨论】:

  • 您是否希望 shell 在您的命令完成后运行交互式会话?您可以使用一个临时文件并使用--rcfile 传递它。

标签: bash shell piping


【解决方案1】:

试试:

cat file1 - | ./myprog

许多程序将“文件名”- 识别为标准输入。

【讨论】:

    【解决方案2】:

    您可以访问 C 程序源代码吗?我的猜测是 C 程序正在使用 istty(0) 来确定标准输入是否来自终端。在这种情况下,它可能只创建一个交互式外壳。使用标准输入重定向,无论是来自文件还是管道,都意味着istty(0) 返回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多