bash运行nc与&符终止程序

时间:2016-02-26 07:29:04

标签: linux bash shell pipeline

我想通过&运行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。

2 个答案:

答案 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