bash - 如何在 PS1 中设置条件换行符?

标签 bash shell ps1

我正在尝试设置 PS1 以便它在登录后立即打印出一些内容,但稍后会以换行符开头。

假设 export PS1="\h:\W\u\$ ",那么第一次(即登录后)您会得到:

hostname:~ username$ 

我一直在尝试在我的 ~/.bashrc 中做一些类似的事情:

function __ps1_newline_login {
  if [[ -n "${PS1_NEWLINE_LOGIN-}" ]]; then
    PS1_NEWLINE_LOGIN=true
  else
    printf '\n'
  fi
}

export PS1="\$(__ps1_newline_login)\h:\W \u\$ “

期望得到:

# <empty line>
hostname:~ username$ 

一开始的完整示例是:

hostname:~ username$ ls `# notice: no empty line desired above!`
Desktop      Documents

hostname:~ username$ 

最佳答案

尝试以下操作:

function __ps1_newline_login {
  if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
    PS1_NEWLINE_LOGIN=true
  else
    printf '\n'
  fi
}

PROMPT_COMMAND='__ps1_newline_login'
export PS1="\h:\W \u\$ "

解释:

  • PROMPT_COMMAND 是一个特殊的 bash 变量,每次在设置提示之前执行。
  • 您需要使用-z 标志来检查字符串的长度是否为0。

关于bash - 如何在 PS1 中设置条件换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859148/

相关文章:

bash - shell脚本中断时如何触发命令?

linux - 在标题后打印文件中的第二个字段。

shell - 构建后将文件复制到docker镜像

PS1 更改的 Linux 脚本命令

linux - 修剪 PS1 的工作目录路径

linux - 空闲 bash 脚本,直到记录 CTRL+c 事件

windows - 将 PowerShell 转换为 Bash

ajax - 当文件由另一个程序写入时,是否可以使用 perl/ajax 逐行读取文件?

python - 在不同的 shell 窗口中启动 2 个并行进程

bash - Bash PS1 提示符中的长行重叠