我想将netcat stdin和stdout委托给一个函数。
我可以执行以下操作仅重定向stdout
nc -l -p 1234 | my_function
我可以执行以下操作仅重定向stdin
nc -l -p 1234 < <(my_function)
答案 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>]
。