Как отправить аргументы командной строки и стандартные входные данные в программу из сценария оболочки - PullRequest
0 голосов
/ 28 июня 2019

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

Если бы в программе на C ++ существовали только аргументы командной строки, код был бы:

 #! /bin/bash
./myprogram arg1 arg2 
do something here

Если программе на C ++ требуется только стандартный ввод от пользователей, код будет:

 #! /bin/bash
./myprogram
do something here
echo "some input" | ./myprogram
do something

Но у меня проблемы с объединением этих фрагментов информации. Я не должен менять основную программу cpp. Поэтому я не могу удалить аргументы командной строки из моей основной программы.

Наконец, мой код должен выглядеть так:

#! /bin/bash
./myprogram arg1 arg2
do something here
echo "some input" | ./myprogram
do something

Есть предложения?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Если я правильно понимаю вашу ситуацию, кажется, что вы хотели бы использовать оба параметра командной строки, а также иметь возможность передавать данные в одну и ту же программу, как если бы они вводились из стандартного ввода.

Если так, то решение простое.Вы можете сделать оба одновременно:

echo "some input" | ./myprogram arg1 arg2

Параметры для программы обрабатываются отдельно от STDIN.Поэтому конфликта нет.Программа на C ++ будет обрабатывать параметры в виде массива, переданного в main(), и обрабатывать входные данные, передаваемые ей через поток, поступающий из STDIN.

Сама программа должна определить, когда и какон обрабатывает эту информацию.Вполне возможно, что он может сначала проверить STDIN.Если вам нужно отложить ввод по каналу, вы можете использовать команду expect.К счастью, общепринятым условием является обработка параметров командной строки перед тем, как перейти к другим действиям, таким как проверка ввода, поэтому в большинстве случаев вышеуказанное должно работать.

0 голосов
/ 28 июня 2019

Если ваш bash-скрипт - script.sh

#! /bin/bash
#script.sh
argument1=$1
argument2=$2
echo $argument1
echo $argument2
./myprogram $argument1 $argument2 

, вы можете запустить его как

#./script.sh argument1 argument2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...