У меня есть программа C++, и она читает различные входы от пользователя (стандартный ввод) в интерактивном режиме, и она отлично работает. Но теперь мне нужно выполнить эту программу из сценария оболочки (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
В вашей программе C++ больше нечего делать, читая данные из stdin (или cin
для C++). Это ваше решение в оболочке bash создать временный объект с данными и передать его процессу, который запускает исполняемый файл, который был скомпилирован из источника 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.