【发布时间】:2019-04-15 00:21:06
【问题描述】:
任何拥有复杂 .bashrc 文件的人都可能遇到过这种情况。如果您在 Bash 加载时键入任何内容,则在加载后,您键入的字符会同时打印在提示符的左侧和右侧。
例如...
重现步骤
- 将
sleep 5添加到您的 .bashrc 文件的底部 - 关闭并重新打开您的终端模拟器
- 在终端加载之后,但在 Bash 完成加载之前,键入 asdf
实际结果
asdfuser@hostname$ asdf
想要的结果
user@hostname$ asdf
有没有什么方法可以清除提示左侧的文本,或者阻止它从一开始就出现,而不需要执行 clear 或 reset ?
(不管它有什么价值,我问是因为我想以编程方式创建一个 tmux 会话,该会话将某些文本打印到提示而不执行它。这种情况一直在发生,因为 tmux 在 Bash 完成加载之前打印文本。但是这个甚至在 tmux 之外也会发生,就像上面的重现步骤一样,所以我不确定我对 tmux 的使用与这个问题有多相关。)
【问题讨论】:
-
bash对您的键盘一无所知;它的标准输入只是其父提供的打开文件描述符。您的 终端(或终端仿真器)负责将键盘输入转换为字节流以提供给 shell,并在 addition 中将任何键盘输入回显到屏幕将其传递给 shell 的输入。 -
同样,当我登录时,我必须在用户名后等待提示返回,否则密码会在密码提示
aPassword:***周围拆分...不好看。 -
@chepner 这很有道理。这让我想知道:如果 shell 可以在事后清除该文本 (
reset) 是否也不能被告知要隐藏它? -
再一次,当文本被写入时,Bash 正在运行。它已开始读取其配置,但尚未完成。
-
reset除了写入一个字节(或字节序列),终端仿真器将其解释为清除屏幕的指令(而不是按字面意思打印字节)之外,什么也不做与外壳。
标签: bash shell terminal prompt tmux