Bash 从可执行文件读取并写回响应
我正在用启动一个可执行文件Bash 从可执行文件读取并写回响应,bash,stdout,stdin,Bash,Stdout,Stdin,我正在用启动一个可执行文件 ./test 然后它将向stdout写入一个文本 static test: DYNAMIC_VAL 静态测试始终相同,但值动态值发生变化。 我需要读取DYNAMIC\u VAL,根据DYNAMIC\u VAL,对其进行处理并将字节十六进制代码\x12\x34\x56发送回stdin /test是一个可执行文件,stdin应该在原始调用test时执行,否则动态值会随着新调用而改变 在bash中是否有一种简单的方法可以做到这一点?如果我正确理解了这个问题,您希望从/t
./test
然后它将向stdout写入一个文本
static test: DYNAMIC_VAL
静态测试
始终相同,但值动态值
发生变化。
我需要读取DYNAMIC\u VAL
,根据DYNAMIC\u VAL
,对其进行处理并将字节十六进制代码\x12\x34\x56
发送回stdin
/test
是一个可执行文件,stdin应该在原始调用test
时执行,否则动态值会随着新调用而改变
在bash
中是否有一种简单的方法可以做到这一点?如果我正确理解了这个问题,您希望从/test
进程中读取一行数据,然后将数据写回同一进程并重复,直到它生成某个表示它已经完成(或永远完成)的内容
一种方法是使用
例如:
$ cat test.sh
#!/bin/sh
echo "static test: foo"
read line
echo "static test: bar"
read line
echo "static test: done"
$ cat demo.sh
#!/usr/bin/env bash
coproc ./test.sh
while true; do
read -r -u "${COPROC[0]}" s t dynamic_val
case "$dynamic_val" in
"done")
echo "Exiting"
break;;
*)
echo "read $dynamic_val"
printf "\x12\x34\x56\n" >&"${COPROC[1]}";;
esac
done
$ ./demo.sh
read foo
read bar
Exiting
测试的标准?你试过什么?您知道如何在bash中读取命令的输出吗?您知道如何将“十六进制代码”发送回“标准输入”吗?@OznOg yes发送回的标准输入test@KamilCuk我知道我通常可以使用echo-e“\x12\x34\x45”|/test来传输十六进制代码“
但在我的情况下,我必须先读取输出。您是希望将stdout作为stdin提供给test
的相同调用,还是希望在每次处理一组新的“字节十六进制代码”时调用test
的新副本?什么是测试
?二进制文件?shell脚本?如果是shell脚本(或者您有二进制代码的源代码),那么您可以在test
中进行编辑以执行额外的处理吗?(试图更好地了解需求和可用选项)