启动XTerm时,提示从终端的第一行开始。运行命令时,提示将向下移动直到到达底部,然后一直停留在底部(甚至不行Shift-Page Down否则鼠标可以更改此值)。并不是让终端生命周期的开始是“特殊的” ,而是提示应始终位于终端的底部。请注意,我有多行提示。
当然,它应该像以前一样工作(可调整大小,可滚动,输出中没有不必要的换行符,并且输出不会神秘消失),因此PROMPT_COMMAND='echo;echo;...'
,类似的选择不是一种选择。理想情况下,解决方案不应是特定于外壳的。
编辑:在目前的解决方案,在简单的情况下工作时,有几个问题:
PS1
它将失败。一个例子是的virtualenv,这增加了(virtualenv)
在开始的PS1
,然后总是消失只是倍以上。除了分叉XTerm之外,还有什么方法可以避免这些问题?
如果使用bash
,则应使用以下技巧:
TOLASTLINE=$(tput cup "$LINES")
PS1="\[$TOLASTLINE\]$PS1"
或(效率不高,因为它tput
在每个提示符之前运行一个命令,但在调整终端窗口的大小之后才起作用):
PS1='\[$(tput cup "$LINES")\]'$PS1
为了防止tput
更改退出代码,您可以显式保存并重置它:
PS1='\[$(retval=$?;tput cup "$LINES";exit $retval)\]'$PS1
注意,该变量retval
是局部变量。它不会影响retval
您可能已经在shell中定义的任何变量。
由于大多数终端cup
功能是相同的\e[y;xH
,因此您也可以对其进行硬编码:
PS1='\[\e[$LINES;1H\]'$PS1
如果希望它对以后重置PS1的安全,则也可以使用该PROMPT_COMMAND
变量。如果设置,它将在输出提示之前作为命令运行。所以效果也可以通过
PROMPT_COMMAND='(retval=$?;tput cup "$LINES";exit $retval)'
当然,虽然重置PS1
不会影响此设置,但是其他一些软件也可能会更改PROMPT_COMMAND
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句