加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何使用’coproc’与另一个命令驱动程序进行交互

发布时间:2020-12-16 01:35:48 所属栏目:安全 来源:网络整理
导读:好吧,显然我不是一个bash guru而且我需要一个! 我之前从未使用过’coproc’,但它似乎正是我所需要的.但是,我不得不承认我无法从那里的各种’ping’例子中推断出来! [我确实尝试了几个小时…] 我想要做的就是启动一个’coproc’shell脚本,它可以从标准输入
好吧,显然我不是一个bash guru而且我需要一个!

我之前从未使用过’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]}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读