sta*_*z77 16 bash prompt command-history
我已将我的PS1变量设置.bashrc为以下内容:
PS1='\e[35m[\W]:\e[0m '
它实现了预期目标(更改显示cwd在内部[]和之前的提示的颜色:),但是当我搜索我的命令历史记录时,有时我循环遍历的部分命令会附加到提示上。例如:
[~]: echo "something"
something
[~]: date
Sun Nov 18 17:07:54 PST 2012
[~]: sudo apt-get install vim
...
Run Code Online (Sandbox Code Playgroud)
现在,说我想回到我的echo "something"命令,我按下并得到
[~]: sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)
我再次按下,这发生了
[~]: sudo apt-date
Run Code Online (Sandbox Code Playgroud)
再起来
[~]: sudo apt-echo "something"
Run Code Online (Sandbox Code Playgroud)
如果我按退格键删除命令行上的所有内容,它会一直删除
[~]: sudo apt-
Run Code Online (Sandbox Code Playgroud)
它对命令没有影响。例如,该行[~]: sudo apt-date仍将打印等的输出date。为什么会发生这种情况,如何在没有副作用的情况下实现所需的提示?
Omn*_*ous 26
发生的事情是 Bash 对提示中的打印字符数感到困惑。它将光标定位序列发送到终端以正确定位光标以执行命令历史等。它需要很好地了解打印提示后光标的实际位置。
尝试将您的提示设置为:
PS1='\[\e[35m\][\W]:\[\e[0m\] '
Run Code Online (Sandbox Code Playgroud)
它现在应该按预期工作。
在\[和\]对告诉猛砸它们之间的东西是一个非打印转义序列,也不会真正向前移动光标。然后它会正确猜测光标位置并在浏览命令历史时进行适当的替换。
该信息可以在 info 节点中找到(bash)Printing a Prompt。
编辑:在较新版本的 bash 中,这已更改为(bash)Controlling the Prompt.
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |