gpt4 book ai didi

c - 如何为需要多次输入的 C 程序编写 Bash 脚本?

转载 作者:行者123 更新时间:2023-11-30 19:59:51 25 4
gpt4 key购买 nike

所以我有一个 C 程序,它接受命令行参数,并用它做一些事情。过了一会儿,它会重新提示用户输入一些标准输入。

例如,典型用法如下所示:

./prac1 4
4
Enter something else: _hello_
hello

我的问题是,如何编写一个能够重新输入更多输入(通过标准输入)的bash脚本,以便在程序输出后响应程序的重新提示 输入其他内容:?

到目前为止我有这个:

cc=gcc
EXEC=prac1
SRC=prac1.c
input="4"

printValue=`./$EXEC $input`
if [ "$?" == '1' ];
then
echo "Error"
exit
fi
echo "printValue = $printValue"
上面的

prac1引用了以下代码:

int main(int argc, char** argv) {
char* input[70];
printf("%c\n", argv[1][0];
fflush(stdin);
printf("Enter something else: ");
fscanf(stdin, "%s", input);
printf("%s\n", input);
}

bash 脚本使用命令行参数“4”调用可执行文件prac1。当我运行此脚本时,在使用 printValue=`./$EXEC $input` 执行后,我必须在“输入其他内容:”提示后手动输入一些内容。这是可以预料的。

但是,我正在尝试弄清楚如何让 bash 自动输入某些内容。我的意思是这样我就不必自己手动输入。

提前非常感谢您。

最佳答案

当您开始运行程序时,您可以立即在标准输入上传递所有输入字符串(例如 here document );仅当收件人确实想要读取时,操作系统缓冲才会传送它们。

printValue=$(./prac1 "$input"<<\____
first answer
Here's my answer to the second prompt.
If the script reads multiple lines of input
until EOF at any point, that of course will
consume all of the remaining here document.
____
)

注意我们如何使用$(...)语法而不是过时的 `...`反引号语法,并避免将仅使用一次的值放入变量(即。可执行文件的名称)。

顺便说一句,除非退出代码 1 是您想要捕获的唯一退出代码,否则只需添加 || exit在上面第一行的末尾(假设您的程序在因错误退出时打印诊断信息;或者可能重构为 shell 函数 die 打印警报,然后以当前退出退出代码)。

在您的具体示例中,因为您的程序只需要一行输入,所以我们可以将其作为字符串传递:

printValue=$(./prac1 "$input" <<<"something else")

或可移植

printValue=$(echo "something else" | ./prac1 "$input")

(<<<"here string" 语法仅限 Bash。)

如果您的程序在行缓冲输入方面表现不佳,也许可以转向 expect 用于自动化;但要意识到,这也会使用户将来更难围绕您的工具编写脚本。也许您想让它变得更容易,也许允许用户通过传递命令行选项或配置文件来避免交互式提示(无论如何这都是邪恶的)。

关于c - 如何为需要多次输入的 C 程序编写 Bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com