如何找到在 bash 提示符前面打印的readline 模式字符串(例如@
or(cmd)
或)的长度?(ins)
该模式字符串由以下方式激活set show-mode-in-prompt on
在.inputrc
。
我想从 中确定该字符串的长度$PROMPT_COMMAND
。
我正在尝试在tput
提示内进行一些光标移动,以在终端的右侧打印一些信息(以便在需要时可以覆盖它),然后恢复在左侧打印提示,但我需要考虑考虑模式字符串的长度。
如果将模式(例如)更改为前缀,则再次调用$PROMPT_COMMAND
并重新打印提示?emacs-mode-string
vi-ins-mode-string
答案1
并不是关于模式字符串长度问题的真正答案,而是一种解决方法:
我最终使用了ANSI CSI 代码保存和恢复光标的位置。 (感谢@tripleee 的指点)。
我仍然无法找到模式字符串的长度,即使使用我尝试过的各种东西来PS1=$(getColumn)
获取光标位置时也是如此:getColumn
我使用 ANSI CSI 代码的解决方法如下回答“提示部分右对齐”。
我对这个解决方法非常满意,因为我设法在没有单个子流程的情况下完成它,并使其shellcheck
干净。