Моя текущая PS1:
PS1='\[\033]0;$TITLEPREFIX:${PWD//[^[:ascii:]]/?}\007\]\n\[\033[32m\]\u@\h \[\033[35m\]`date +%Y-%m-%d,%H:%M:%S` \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$: '
Да, это беспорядок, но он мне хорошо служит - мои подсказки выглядят так:
P2759474@RVPTINTCL415MQC 2017-10-06,11:20:18 ~/repos/jdk (master)
Они даже имеют цветовую маркировку: user@machine — зеленый, отметка времени — фиолетовый, текущее местоположение — желтый, а любая ветка git — синий. Меня просто немного раздражает, что мне приходится использовать обратные апострофы вместо конструкции $()
.
Кто-нибудь знает, почему? Готовы помочь мне понять это? Это проблема только при анализе сложных значений приглашения с помощью команд подоболочки, и только тогда проблема, потому что я хочу понять, почему это имеет значение там ... Общие предложения по улучшению всегда приветствуются, пока мы это делаем.
Обновлять -
В настоящее время, когда я пытаюсь использовать $(), я получаю много
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;
Это мне что-то говорит, может быть... Спасибо!
set | grep BASH_VER
(или аналогичного) (какую версию Bash вы используете)? И что произойдет, если вы вместо этого используете$( ... )
? Пожалуйста, обновите свой вопрос, а не отвечайте в комментариях. Спасибо и удачи. - person shellter   schedule 06.10.2017$(...)
.PS1='$(echo foo) $' gives
foo $` как и ожидалось. - person chepner   schedule 06.10.2017