繁体   English   中英

如何将命令行参数和标准输入从Shell脚本发送到程序

[英]How to send both command line arguments and standard inputs to a program from a shell script

我正在尝试编写一个执行C ++程序的Shell脚本。 C ++程序同时接受命令行参数和用户输入。 该程序具有通过命令行参数选择的不同模式。 选择模式后,程序将执行一项任务,接受用户的输入,然后执行另一项任务。 我的目标是从shell脚本自动向该程序发送一堆预定值。

如果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

有什么建议么?

如果我正确理解了您的情况,似乎是在说您既要使用两个命令行参数,又要能够将输入通过管道输入到同一程序中,就像从标准输入中键入一样。

如果是这样,那么解决方案很简单。 您可以同时执行两个操作:

echo "some input" | ./myprogram arg1 arg2

程序的参数与STDIN分开处理。 因此,没有冲突。 C ++程序会将参数作为传递给main()的数组进行处理,并将处理通过来自STDIN的流传递给它的输入。

由程序本身确定何时以及如何处理该信息。 完全有可能先检查STDIN。 如果需要延迟管道输入,则可以考虑使用expect命令。 幸运的是,通常的惯例是在继续执行其他操作(例如检查输入)之前首先处理命令​​行参数,因此以上内容在大多数情况下都可以使用。

假设您的bash脚本是script.sh

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

您可以将其运行为

#./script.sh argument1 argument2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM