为什么我不能在 PS1 中使用 $(...) 而不是反引号?
Why can't I use $(...) in PS1 instead of backticks?
我目前的PS1:
PS1='\[3]0;$TITLEPREFIX:${PWD//[^[:ascii:]]/?}[=11=]7\]\n\[3[32m\]\u@\h \[3[35m\]`date +%Y-%m-%d,%H:%M:%S` \[3[33m\]\w\[3[36m\]`__git_ps1`\[3[0m\]\n$: '
是的,一团糟,但它对我很有用——我的提示是这样的:
P2759474@RVPTINTCL415MQC 2017-10-06,11:20:18 ~/repos/jdk (master)
它们甚至用颜色编码,user@machine 为绿色,时间戳为紫色,当前位置为黄色,任何 git 分支为蓝色。我只是有点生气,因为我 不得不 使用反引号而不是 $()
结构。
有人知道为什么吗?愿意帮我理解吗?这只是在使用子 shell 命令解析复杂的提示值时出现的问题,并且只是因为我想了解为什么它在那里很重要......我们总是欢迎一般的改进建议。
更新-
目前,当我尝试使用 $() 时,我得到了很多
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: 'date +%Y-%m-%d,%H:%M:%S)'
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: '__git_ps1)'
我的环境有
BASH_VERSINFO=([0]="4" [1]="3" [2]="42" [3]="5" [4]="release" [5]="x86_64-pc-msys")
BASH_VERSION='4.3.42(5)-release'
[ -z "$BASH_VERSION" ] || shopt -q promptvars || ps1_expanded=no;
这告诉了我一些事情,也许...谢谢!
当您开始尝试在提示中嵌入命令时,是时候开始使用 PROMPT_COMMAND
。
# You won't even have to put the title-bar stuff in your prompt
# and there are already shortcuts for date and time
set_titlebar () {
printf '3]0;%s:%s[=10=]7' "$TITLEPREFIX" "${PWD//[^[:ascii:]]/?}"
}
set_prompt () {
PS1='\[3[32m\]\u@\h ' # user@host in green
PS1+='\[3[35m\]\D{%Y-%m-%d},\t ' # Don't need date
PS1+='\[3[33m\]\w\[3[36m\]' # Directory in orange
PS1+=$(__git_ps1) # git info, if appropriate
PS1+='\[3[0m\]\n$: '
}
PROMPT_COMMAND='set_titlebar;set_prompt'
我目前的PS1:
PS1='\[3]0;$TITLEPREFIX:${PWD//[^[:ascii:]]/?}[=11=]7\]\n\[3[32m\]\u@\h \[3[35m\]`date +%Y-%m-%d,%H:%M:%S` \[3[33m\]\w\[3[36m\]`__git_ps1`\[3[0m\]\n$: '
是的,一团糟,但它对我很有用——我的提示是这样的:
P2759474@RVPTINTCL415MQC 2017-10-06,11:20:18 ~/repos/jdk (master)
它们甚至用颜色编码,user@machine 为绿色,时间戳为紫色,当前位置为黄色,任何 git 分支为蓝色。我只是有点生气,因为我 不得不 使用反引号而不是 $()
结构。
有人知道为什么吗?愿意帮我理解吗?这只是在使用子 shell 命令解析复杂的提示值时出现的问题,并且只是因为我想了解为什么它在那里很重要......我们总是欢迎一般的改进建议。
更新-
目前,当我尝试使用 $() 时,我得到了很多
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: 'date +%Y-%m-%d,%H:%M:%S)'
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: '__git_ps1)'
我的环境有
BASH_VERSINFO=([0]="4" [1]="3" [2]="42" [3]="5" [4]="release" [5]="x86_64-pc-msys")
BASH_VERSION='4.3.42(5)-release'
[ -z "$BASH_VERSION" ] || shopt -q promptvars || ps1_expanded=no;
这告诉了我一些事情,也许...谢谢!
当您开始尝试在提示中嵌入命令时,是时候开始使用 PROMPT_COMMAND
。
# You won't even have to put the title-bar stuff in your prompt
# and there are already shortcuts for date and time
set_titlebar () {
printf '3]0;%s:%s[=10=]7' "$TITLEPREFIX" "${PWD//[^[:ascii:]]/?}"
}
set_prompt () {
PS1='\[3[32m\]\u@\h ' # user@host in green
PS1+='\[3[35m\]\D{%Y-%m-%d},\t ' # Don't need date
PS1+='\[3[33m\]\w\[3[36m\]' # Directory in orange
PS1+=$(__git_ps1) # git info, if appropriate
PS1+='\[3[0m\]\n$: '
}
PROMPT_COMMAND='set_titlebar;set_prompt'