cd / | vi
这是我在bash shell中输入的命令。 执行此命令时,它只是打开vi编辑器。然后我退出使用:q。 现在我在bash shell。 当我们在这里键入任何命令时它不会显示,但执行命令。 我想知道它被重定向到哪里。
答案 0 :(得分:4)
不是100%肯定,但我想就此发表意见。
我认为这与输入/输出控制有关。
阅读cd
的手册页:
STDOUT
If a non-empty directory name from CDPATH is used, or if cd − is
used, an absolute pathname of the new working directory shall be written to the
standard output
as follows:
"%s\n", <new directory>
Otherwise, there shall be no output.
即,如果你cd /
,则stdout为/dev/null
,而pipe将stdout作为stim的stdin。
当vim启动时,它会保存终端设置,输入/输出控件。但如果它是/dev/null
,而不是tty文件描述符,vim
将没有正确的设置。退出vim之后,它会在终端上应用那些不正确的东西。
要测试,执行:
cd -|vim
cd -
将有stdout,然后vim有正常的stdin,退出vim后,终端仍应正常工作。
然后试试这个:
vim </dev/null
这与cd /|vim
相同,退出vim后,您的终端行为异常,与cd /|vim
stty sane
可以拯救你的终端。