我正在尝试构建一个将响应简单C程序的脚本。我猜这些脚本需要逐行读取并解析文本,直到找到问题为止。然后,它必须回复相同的stdout。脚本在无限循环中读取,我在命令行
上启动它./script.sh &
为了使其在后台运行。然后,在同一终端中,我启动在命令行上输出并在SCANF等待的C程序。我的问题是,看来这两个过程正在与其他Stdout进行交互,因为它们无法"看到"彼此。显然我误解了一些东西...有什么帮助吗?
#!/bin/bash
for (( ; ; )) do
while read line; do
if [ "$line" == ">" ] then
echo "yes"
fi
done
done
使用期望如何?期望是一个Unix工具,可以编程回复交互式应用程序,对于解决您的问题非常有用。当然,您可以在bash脚本中使用它。
您问题的答案看起来与:
#!/bin/bash
expect << EOF
spawn simple_c_application
expect ">"
send "yesr"
expect eof
EOF
脚本将产生您的应用程序,检查您的输出,然后回复是当输出行包含> 时。您还可以在期望模式中使用锚点:字符^
匹配线路的开头,而 $
结束。因此,只有当行是> 。
^>$
才匹配您只需要安装您的软件包管理器的期望,然后一如既往地使用bash脚本。
使用mkfifo
创建一个套接字文件,从此套接字文件而不是stdin
读取脚本。从您的C程序中,使用open
打开套接字,只需写入此而不是stdout。
示例:
在终端类型中以创建套接字文件。
user~$ mkfifo mysocket
将您的脚本更改为:
while :
do
here=$(<mysocket)
if [ "$here" == ">" ] then
echo "yes"
fi
done
和您的C文件
char* test = ">n";
int mysocket = open("/home/user/mysocket","w");
int byteswrite = write(mysocket,(void*)test,2);
首先运行脚本,然后在您的程序之后