答案1
为什么命令
exec 2> /tmp/mytest
无法完成?
它可以,而且确实如此。您等待的提示转到重定向的 stderr,即/tmp/mytest
。从现在开始,无论您输入什么,都将回显到文件,而不是终端。如果您尝试移动光标,那么负责光标移动的序列也将转到文件。
盲目地输入echo foo
、点击Enter,看看会发生什么。
(如果没有输出,则意味着在您输入之前命令行很可能不为空echo
。但现在可能为空。重复。)
shell 正常运行,您可以执行命令。您无法看到已重定向的内容。
如果您exec 2> /tmp/mytest
在脚本中使用,那么其“劫持”提示的能力就无关紧要了,因为解释脚本的 shell 不会像交互式 shell 那样打印提示。例外:
- 如果你在源脚本
exec 2> /tmp/mytest
中将要影响你从中获取来源的 shell; - 脚本中的命令可以打印自己的提示,它们可以使用 stderr 来实现。
问题是关于 Bash 的。许多其他 shell 的行为与 Bash 类似。
值得注意的是,Zsh 不使用 stderr 来打印提示。Zshexec 2> /tmp/mytest
不会重定向提示。我猜这是您预期的行为。