编辑PS1时,使用转义序列的人几乎无论如何都可以操纵提示的形式。不管怎么说,每次都是stdout在命令输入后立即启动。为简单起见,这里是一个简单提示的示例,它在命令条目下面添加了一些元素:
PS1='aaaaaaaa\n\[\033[1B\]bbbbbbbb\n\[\033[2A\]\u@\h:\w\$ '
看起来或多或少是这样的:
aaaaaaaa
user@hostname:~$ █
bbbbbbbb
完成提示的绘制后,请注意光标的位置。 PS1变量中使用的\033[
操纵光标(向上和向下移动光标)以便能够绘制' b'提示下方的分隔符并返回到位置。
但是,如果运行命令,则stdout按预期覆盖命令下面的任何内容:
aaaaaaaa
user@hostname:~$ echo 'hello '
hello bb
aaaaaaaa
user@hostname:~$ █
bbbbbbbb
问题是,是否有一种方法可以从命令的最后一个字符开始操纵提示行为:
<editable prompt><command><editable area after command?>
例如,如果我可以指示bash在解决示例所描述的问题的每个命令之后打印换行符或任何转义序列。
答案 0 :(得分:3)
这个技巧可能会奏效。我从https://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command得到了这个想法 但我尽可能地简化了。
trap 'echo' DEBUG
理论上只是使用bash的DEBUG陷阱在执行任何内容之前写一个空行。