我想知道执行此命令时发生了什么?

时间:2014-09-15 13:35:38

标签: bash

cd / | vi

这是我在bash shell中输入的命令。 执行此命令时,它只是打开vi编辑器。然后我退出使用:q。 现在我在bash shell。 当我们在这里键入任何命令时它不会显示,但执行命令。 我想知道它被重定向到哪里。

1 个答案:

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

可以拯救你的终端。