前端之家收集整理的这篇文章主要介绍了
bash – 如何使用’coproc’与另一个命令驱动程序进行交互,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
404_0@
好吧,显然我不是一个bash guru而且我需要一个!
@H_
502_1@我之前从未使用过’coproc’,但它似乎正是我所需要的.但是,我不得不承认我无法从那里的各种’ping’例子中推断出来! [我确实尝试了几个小时…]
@H_
502_1@我想要做的就是启动一个’coproc’
shell脚本,它可以从标准输入中
获取输入,并将其结果写入标准
输出.我希望主脚本分别发送和处理这些命令和结果.
@H_
502_1@这是我想要做的最简单的概述之一:
用更好的细节编辑
#! /bin/bash
coproc bkgndProc {
/some/path/to/usefulScript.sh maybeSomeArgsHere
}
// send command #1 to bkgndProc here
result=$(echo 'command' <&${bkgndProc[0]}) ### Doesn't work for me
echo "Did it work? $result" ### this just prints back the 'command' I used
// here execute conditional logic based on result:
// if result1; then
// send command #2 here,getting results
// else
// send command #3 here,again getting results
// fi
@H_
502_1@很抱歉使用上面的伪
代码,但我不确定那些发送命令应该是什么!如果有人能提供非常感谢的细节!
result = $(echo 'command' <&${bkgndProc[0]}) ### Doesn't work for me
@H_
502_1@至少基本上没有用,因为你有空格
result=$(echo 'command' <&${bkgndProc[0]})
@H_
502_1@—-更新—-
@H_
502_1@一个简单的概念可以在这样的脚本中
显示:
#!/bin/bash
# create the co-process
coproc myproc {
bash
}
# send a command to it (echo a)
echo 'echo a' >&"${myproc[1]}"
# read a line from its output
read line <&"${myproc[0]}"
# show the line
echo "$line"
@H_
502_1@
输出:
a
@H_
502_1@另一个使用超时读取多行:
#!/bin/bash
coproc myproc {
bash
}
# send a command to message 4 random numbers in 4 lines
echo 'echo "$RANDOM"; echo "$RANDOM"; echo "$RANDOM"; echo "$RANDOM"' >&"${myproc[1]}"
# keep reading the line until it times out
while read -t 1 -u "${myproc[0]}" line; do
echo "$line"
done
@H_
502_1@
输出:
17393
1423
8368
1782
@H_
502_1@如果我们使用cat,它将不再
退出,因为另一端仍然存活并连接,并且尚未达到EOF.这就是我们使用超时的原因.
cat <&"${myproc[0]}"