重定向stdin和stdout

时间:2014-06-12 17:51:50

标签: bash netcat

我想将netcat stdin和stdout委托给一个函数。

我可以执行以下操作仅重定向stdout

nc -l -p 1234 | my_function

我可以执行以下操作仅重定向stdin

nc -l -p 1234 < <(my_function)

2 个答案:

答案 0 :(得分:4)

当my_function被包装为可执行的表单(文件)时,您可以使用netcat的-e选项:

nc -l -p 1234 -e my_function

但是如果它是bash中的一个函数,启动Bash 4.0就可以使用coproc

coproc my_function
nc -l -p 1234 <&"${COPROC[0]}" >&"${COPROC[1]}"

答案 1 :(得分:-1)

您可以使用以下方法组合重定向:

nc -l -p 1234 < <(my_function1) | my_function2

编辑:以下是一个单一功能样本使用:

func() { read -t 1 line 2>/dev/null && echo "[$line]" || echo "<$@>"; }

cat < <(func aa bb cc) | func
[<aa bb cc>]

首先执行func aa bb cc并通过流程替换语法cat将其输入为<aa bb cc>。这将传递给stdin上的相同函数func,从而在stdout上打印[<aa bb cc>]