我想通过&运行nc然后随时从/ proc文件系统手动提供stdin中的数据。所以问题是:
如果我运行nc 127.0.0.1 1234 &
程序在后台运行,我可以写入stdin,无论我想要什么。但是,如果我创建test.sh并添加
#!/bin/bash
nc 127.0.0.1 1234 &
sleep 20
它连接到1234并立即终止(甚至不等待20秒)。为什么?我怀疑它是从某个地方写下它的stdin。
答案 0 :(得分:1)
如果我的目的正确,您希望手动将数据提供给nc,并将其发送给客户。
您可以为此目的使用命名管道。
cat /tmp/f | ./parser.sh 2>&1 | nc -lvk 127.0.0.1 1234 > /tmp/f
其中/tmp/f
是使用mkfifo /tmp/f
nc
的任何内容都可以在parser.sh
中回显
答案 1 :(得分:1)
有趣的问题。
bash手册页指出:
int[]
如果在shell脚本(带有作业控制)之外调用 If a command is followed by a & and job control is not active, the
default standard input for the command is the empty file /dev/null.
Otherwise, the invoked command inherits the file descriptors of the
calling shell as modified by redirections.
,则会产生相同的结果。
您可以像这样更改bash脚本以使其正常工作:
nc 127.0.0.1 1234 < /dev/null