【问题标题】:C++ program needs inputs from stdin, but I want to pipe/send these inputs from shell scriptC++ 程序需要来自标准输入的输入,但我想从 shell 脚本通过管道/发送这些输入
【发布时间】:2014-01-23 06:50:18
【问题描述】:

我有一个 C++ 程序,它以交互方式从用户(标准输入)读取各种输入,并且运行良好。但现在我需要从 shell 脚本(bash)执行这个程序,并且只需要从这个脚本传递这些输入,而不是手动从用户传递。 我的二进制名称是 myprog,这是我在脚本中尝试过的。但它不起作用。

myprog << \
  __EOF__ | tail -n+21 | grep ":" >> logfile.log 2> /dev/null
   $bdy
   $bdm
   $bdd
   $bth
   $btm
   $bts
   $edy
   $edm
   $edd
   $eth
   $etm
   $ets

EOF

这些变量包含一些日期和时间,例如年 = 2014、月 01、小时 = 04、分钟 = 59 和秒 = 20

【问题讨论】:

  • 我们需要有关您的问题的更多信息。首先,“它不起作用”在这里永远不会给你答案,因为我们不知道什么特别不起作用。你的程序的输入是什么样的?您的输入、预期和实际输出是什么?
  • 谢谢。不工作意味着它没有从脚本中获取输入。在 myprog 中,如果用户不提供任何输入并按 ENTER 键,我会设置默认值。因此,对于上面提到的命令,myprog 仅采用默认值。

标签: c++ shell input pipe stdin


【解决方案1】:

您的 C++ 程序除了从标准输入(或 C++ 的 cin)读取数据外,无事可做。您可以决定在 bash shell 上使用数据创建一个临时对象,并将其传递给运行从 C++ 源代码编译的可执行文件的进程。

使用这样的 bash 脚本

myprog << EOF | tail -n+21 | grep ":" >> logfile.log 2> /dev/null
foo
bar
EOF

请注意最后一行的结束指示符与&lt;&lt; 后面之间的精确匹配。

这里还有一个例子:

Harper@AMSEL ~/Documents
$ cat fff
cat << EOF -b | tail >> logfile.log 2>/dev/null
this text is used
these chars too
EOF

Harper@AMSEL ~/Documents
$ sh ./fff

Harper@AMSEL ~/Documents
$ cat logfile.log
     1  this text is used
     2  these chars too

Harper@AMSEL ~/Documents

您可能必须检查您的命令的哪些参数在本地评估,以及在删除机器上与 ssh 一起使用什么。可能上面的示例有助于将问题与 myprog 隔离开来。

【讨论】:

  • 我根据您的输入修改了命令,但仍然无法正常工作。当我试图从服务器获取输入时,我尝试了类似的方法。 ssh 服务器名 myprog > logfile.log 2> /dev/null foo bar EOF
  • 是的,它帮助我隔离了问题。
猜你喜欢
  • 2015-01-18
  • 2012-04-15
  • 2011-04-29
  • 1970-01-01
  • 2011-03-12
  • 2016-09-22
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多