【问题标题】:Add newline if EOL not detected in bash prompt如果在 bash 提示符中未检测到 EOL,则添加换行符
【发布时间】:2022-12-30 01:15:45
【问题描述】:

有没有办法像 zsh 一样在 bash 中保留部分行?我的 bash 提示在没有换行符和打印其他不可打印的转义字符时出现混乱。

提前致谢!

我试过PS1="\[\e[0m\]\n$PS1"。但我认为这不是一个完美的解决方案。如果在之前的输出中没有检测到 EOL,我只想设置我的 bash 提示符来添加换行符。

【问题讨论】:

  • 关于交互式shell配置的问题更适合Unix & Linux
  • 不过,一般来说,您要做的是使用tput 询问终端光标所在的位置。 (shell 不会读取它运行的程序的输出——输出直接写入 TTY——因此如果不执行该查询,它就无法判断程序是否以换行符结束)。
  • (...意识到我遗漏了一段:PROMPT_COMMAND 是如何指定在打印提示之前运行的函数;该函数可以使用上面链接的答案中的技术来分配适当的 PS1)
  • @CharlesDuffy 是的,PROMPT_COMMAND 的“发现”对我来说是真实发生的。针对我所在的每种目录类型的特殊提示。gitclearcase、... /dev/etc - 自定义可以继续下去。在我们从 clearcase 迁移到 git 的某个时候,我得到了一个提示,结合了我需要的信息,以免出错 :.)

标签: bash prompt ansi-escape eol


【解决方案1】:

##~/.local/bin/add_newline

#!/usr/bin/bash

echo -en "E[6n";read -sdR CURPOS; CURPOS=${CURPOS#*[}; C="${CURPOS##*;}"

[ "$C" -ne 1 ] && echo

$chmod +x ~/.local/bin/*

##~/.bashrc

PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;} add_newline"

谢谢@Charles Duffy

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2011-06-30
    相关资源
    最近更新 更多