Программе на C ++ нужны входные данные из stdin, но я хочу передать эти входные данные из сценария оболочки

0

У меня есть программа 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

  • 1
    Нам нужна дополнительная информация о вашей проблеме. Прежде всего, «это не работает» никогда не дает вам ответов, потому что мы не знаем, что конкретно не работает. Как выглядит вход вашей программы? Каков ваш вклад, ожидаемый и фактический результат?
  • 0
    Благодарю. Не работает означает, что он не принимает входные данные из сценария. В myprog я установил значения по умолчанию, если пользователь не вводит никаких данных и просто нажимает ENTER. Таким образом, с помощью вышеупомянутой команды myprog принимает только значения по умолчанию.
Теги:
input
stdin
pipe

1 ответ

0
Лучший ответ

В вашей программе 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.

  • 0
    Я изменил команду в соответствии с вашими данными, но все равно она не работает. Я пытался что-то вроде этого, поскольку я пытаюсь получить входные данные от сервера. SSH имя сервера myprog << EOF | хвост -n + 21 | grep ":" >> logfile.log 2> / dev / null foo bar EOF
  • 0
    Да, это помогло мне изолировать проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню