首页 > 解决方案 > 使用管道和重定向解析输入字符串

问题描述

我有一个用 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 个管道或重定向。我希望它能够处理不确定数量的管道和重定向。

谢谢。

标签: bashunixpipe

解决方案


推荐阅读