使用管道和重定向解析输入字符串

时间:2018-05-20 16:17:02

标签: bash unix pipe

我有一个"伪术语"用bash写的包装器。它需要输入并将其发送到具有" nc"的设备。命令。我希望它能够处理管道和重定向。这就是我所拥有的。

while read -ep "${1}> " CMD
do
    [[ ${CMD} =~ '|' ]] && SEP=1
    [[ ${CMD} =~ '>' ]] && SEP=2
    [[ -z ${SEP} ]] && echo "${CMD}"|nc -4u -w1 ${1} 65432 && continue
    CMD1=$(echo ${CMD}|awk -F '[|>]' '{print $1}')
    CMD2=$(echo ${CMD}|awk -F '[|>]' '{print $2}')
    [[ ${SEP} -eq 1 ]] && echo "${CMD1}"|nc -4u -w1 ${1} 65432 | ${CMD2}
    [[ ${SEP} -eq 2 ]] && echo "${CMD1}"|nc -4u -w1 ${1} 65432 > ${CMD2}
done

如果检查命令变量以查看它是否包含管道或重定向。

如果没有,则按原样将命令发送到nc。

如果有管道或重定向,则将命令分成两部分:前面的部分,以及管道或重定向后的部分。

将第一部分发送到" nc",将输出发送到第二部分。

有效。但是,它只能处理1个管道或重定向。我希望它能够处理不确定数量的管道和重定向。

感谢。

0 个答案:

没有答案