意外的重定向结果包含2>& 1和命令提示符

时间:2017-01-22 08:57:10

标签: bash shell

我正在玩nc,因为-e命令消失了,所以建议

cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

我认为“2>& 1”是不必要的,因为我不需要知道我将要运行的简单命令的错误,如“whoami”,“ls”等,所以我的命令改为是

cat /tmp/f | /bin/sh -i | nc -l 127.0.0.1 1234 > /tmp/f

但是,我没有得到“干净”的结果。这就是我得到的

SERVER:

Listening on [0.0.0.0] (family 0, port 1234)
$  $

客户端:

nc localhost 1234
ls 
testfile
whoami
user1

基本上,我在客户端终端没有看到$。当我使用2>& 1执行命令时,我得到了我期望的结果

SERVER:

Listening on [0.0.0.0] (family 0, port 1234)

客户端:

nc localhost 1234
$ ls 
testfile
$ whoami
user1

我知道2>& 1表示将stderr重定向到stdout所以在这种情况下,命令提示符“$”如何成为stderr的一部分?它不应该成为标准输入的一部分吗?

1 个答案:

答案 0 :(得分:1)

shell使用标准错误流作为提示,也使用select创建的菜单,以及用于与用户交互的任何其他文本