gpt4 book ai didi

bash - 如何使用 'coproc' 与另一个命令驱动程序交互

转载 作者:行者123 更新时间:2023-11-29 08:57:20 25 4
gpt4 key购买 nike

好吧,显然我不是 bash 大师,但我需要一个!

我以前从未使用过“coproc”,但它似乎正是我所需要的。但是,我必须承认,我无法从那里的各种“ping”示例中进行推断! [我确实尝试了几个小时...]

我想做的就是启动一个“coproc”shell 脚本,它可以从标准输入中获取输入并将其结果写入标准输出。我希望主脚本分别发送和处理这些命令和结果。

这是我正在尝试做的最简单的概述之一:经过更详细的编辑

#! /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

很抱歉使用上面的伪代码,但我不确定那些发送命令应该是什么!如果有人可以提供详细信息,将不胜感激!

最佳答案

result = $(echo 'command' <&${bkgndProc[0]})    ### Doesn't work for me

至少基本上不会工作,因为上面有空格

result=$(echo 'command' <&${bkgndProc[0]})

----更新----

一个简单的概念可以用这样的脚本来表示:

#!/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"

输出:

a

另一个使用超时读取多行:

#!/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

输出:

17393
1423
8368
1782

如果我们使用 cat,它将不再退出,因为另一端仍然存在并连接着,并且还没有到达 EOF。这就是我们使用超时的原因。

cat <&"${myproc[0]}"

关于bash - 如何使用 'coproc' 与另一个命令驱动程序交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726499/

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