Linux 如何从shell脚本向程序发送命令行参数和标准输入 我试图编写一个执行C++程序的shell脚本。C++程序既包含命令行参数,又包含用户输入。程序具有由命令行参数选择的不同模式。选择模式后,程序执行一项任务,从用户处获取输入,然后执行另一项任务。我的目标是从shell脚本自动向这个程序发送一组预先确定的值 如果C++程序中只存在命令行参数,代码将是: #! /bin/bash ./myprogram arg1 arg2 do something here #! /bin/bash ./myprogram do something here echo "some input" | ./myprogram do something 如果C++程序只需要用户的标准输入,代码将是: #! /bin/bash ./myprogram arg1 arg2 do something here #! /bin/bash ./myprogram do something here echo "some input" | ./myprogram do something

Linux 如何从shell脚本向程序发送命令行参数和标准输入 我试图编写一个执行C++程序的shell脚本。C++程序既包含命令行参数,又包含用户输入。程序具有由命令行参数选择的不同模式。选择模式后,程序执行一项任务,从用户处获取输入,然后执行另一项任务。我的目标是从shell脚本自动向这个程序发送一组预先确定的值 如果C++程序中只存在命令行参数,代码将是: #! /bin/bash ./myprogram arg1 arg2 do something here #! /bin/bash ./myprogram do something here echo "some input" | ./myprogram do something 如果C++程序只需要用户的标准输入,代码将是: #! /bin/bash ./myprogram arg1 arg2 do something here #! /bin/bash ./myprogram do something here echo "some input" | ./myprogram do something,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,但我在整合这些信息时遇到了困难。我不应该改变主要的cpp程序。因此,我无法从主程序中删除命令行参数 最后,我的代码应该是这样的: #! /bin/bash ./myprogram arg1 arg2 do something here echo "some input" | ./myprogram do something 有什么建议吗?将bash脚本设置为script.sh #! /bin/bash #script.sh argument1=$1 argument2=$2 echo $arg

但我在整合这些信息时遇到了困难。我不应该改变主要的cpp程序。因此,我无法从主程序中删除命令行参数

最后,我的代码应该是这样的:

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

有什么建议吗?

将bash脚本设置为script.sh

#! /bin/bash
#script.sh
argument1=$1
argument2=$2
echo $argument1
echo $argument2
./myprogram $argument1 $argument2 
您可以按以下方式运行它:

#./script.sh argument1 argument2

Asuming您的bash脚本是script.sh

#! /bin/bash
#script.sh
argument1=$1
argument2=$2
echo $argument1
echo $argument2
./myprogram $argument1 $argument2 
您可以按以下方式运行它:

#./script.sh argument1 argument2

如果我对您的情况理解正确,似乎是说您希望使用这两个命令行参数,同时也能够将输入导入到同一个程序中,就像从标准输入键入一样

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

echo "some input" | ./myprogram arg1 arg2
程序的参数与STDIN分开处理。因此,没有冲突。C++程序将处理数组中的参数,并将其输入到StdI>(代码)>,并处理通过STDIN。
由程序本身决定何时以及如何处理这些信息。它完全有可能首先检查STDIN。如果需要延迟管道输入,则可以考虑使用该命令。幸运的是,通常的惯例是先处理命令行参数,然后再执行其他操作,例如检查输入,因此上述操作在大多数情况下都应该有效。

如果我正确理解您的情况,这似乎是在说,您希望使用两个命令行参数,同时也能够像从标准输入中键入一样将输入导入同一个程序

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

echo "some input" | ./myprogram arg1 arg2
程序的参数与STDIN分开处理。因此,没有冲突。C++程序将处理数组中的参数,并将其输入到StdI>(代码)>,并处理通过STDIN。
由程序本身决定何时以及如何处理这些信息。它完全有可能首先检查STDIN。如果需要延迟管道输入,则可以考虑使用该命令。幸运的是,通常的惯例是先处理命令行参数,然后再执行其他操作,例如检查输入,因此上述操作在大多数情况下都会起作用。

您是否尝试了
echo“some input”|/myprogram arg1 arg2
?或者请解释为什么不适用。你的“如果C++程序只接受标准输入…”示例实际上运行程序两次,一次不提供输入,一次输入。你能使你的例子一致吗?在第一行中,只有一行“做点什么”,但在第二行和第三行中,有两行。仅此一点就应该告诉您,在请求帮助之前,需要解决不一致的问题。来自用户的输入不一定是“标准输入”。如果您试图自动向提示输入的程序提供输入,请查看
expect
,看看它是否能满足您的需要。否则,请更详细地定义您的需要。您是否尝试了
回显“一些输入”|/myprogram arg1 arg2
?或者请解释为什么不适用。你的“如果C++程序只接受标准输入…”示例实际上运行程序两次,一次不提供输入,一次输入。你能使你的例子一致吗?在第一行中,只有一行“做点什么”,但在第二行和第三行中,有两行。仅此一点就应该告诉您,在请求帮助之前,需要解决不一致的问题。来自用户的输入不一定是“标准输入”。如果您试图自动向提示输入的程序提供输入,请查看
expect
,看看它是否能满足您的需要。否则,请更彻底地定义您的需求。