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



我正在尝试编写一个执行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脚本是脚本。sh

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

您可以将其运行为

#./script.sh argument1 argument2

最新更新