C ++程序需要来自stdin的输入,但我想从shell脚本管道/发送这些输入

时间:2014-01-23 06:50:19

标签: c++ shell input pipe stdin

我有一个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

这些变量包含一些日期和时间,例如year = 2014,month 01,hour = 04,minute = 59和second = 20

1 个答案:

答案 0 :(得分:0)

您的C ++程序没有其他任何操作,然后从stdin(或cin for C ++)读取数据。您决定在bash shell上创建一个包含数据的临时对象,并将其传递给运行从C ++源代码编译的可执行文件的进程。

使用像这样的bash脚本

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

请注意最后一行末尾指示符与<<后面的确切位置。

这是另一个例子:

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隔离开来。