PS1 command substitution fails when containing newlines on msys bash

邮差的信 提交于 2019-11-29 01:34:58

You can disambiguate the parsing easily, to prevent hitting any such bug (though I can't reproduce it myself):

PS1='$(date +%s)'$'\n$ '

This $'\n' syntax parses to a literal newline character, whereas '\n' parses to a string containing a two-character \n escape sequence.

For more info on how $'' differs from '' (expanding backslash-escaped sequences) refer to the Bash Hackers Wiki.

tvl

I had a similar issue with .git-prompt when I tried to include it in my PS1 on bash (MSYS2) on Windows. The problem is the \n, if I remove it everything run smoothly but I want to break-line.

By the way on Linux everything is working fine.

The bash is run is: 4.3.42(5)-release (x86_64-pc-msys)

Old, problematic PS1:

PS1='\e[32m\]\u@\h \e[36m\]\w \e[32m\]$(__git_ps1 "(%s)")\nλ \e[0m\]$(tput sgr0)'

Fixed:

PS1='\e[32m\]\u@\h \e[36m\]\w \e[32m\]$(__git_ps1 "(%s)")'$'\nλ \e[0m\]'

Simplified version (no colors, copy-paste-edit it):

PS1='\u@\h \w $(__git_ps1 "(%s)")'$'\n$ '

Cheers Charles Duffy finding the problem!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!