cd / | vi
这是我在 bash shell 中输入的命令。 执行此命令时,它只会打开 vi 编辑器。然后我就不再使用 :q 了。 现在我在 bash shell 中。 当我们在此处键入任何命令时,它不会显示,但会执行该命令。 我想知道它被重定向到哪里。
最佳答案
不是 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成为vim的stdin。
当 vim 启动时,它会保存终端设置、输入/输出控制。但是如果它是 /dev/null
,而不是 tty 文件描述符,vim
将不会有正确的设置。在你退出 vim 后,它会在你的终端上应用那些不正确的东西。
要测试,执行这个:
cd -|vim
cd -
会有标准输出,然后 vim 有正常的标准输入,退出 vim 后,终端应该仍然可以正常工作。
然后试试这个:
vim </dev/null
这与 cd/|vim
相同,退出 vim 后,您的终端行为异常,与 cd/|vim
相同
stty sane
可以拯救您的终端。
关于bash - 我想知道执行此命令时发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849374/