Настройка командной строки Shell и поведение CMD

Я хочу, чтобы мое приглашение отображало: текущий (абсолютный) рабочий каталог, окрашенный в зеленый цвет и в новой строке, знак доллара и пустое пространство.

Я использую эту строку в .profile

export PS1='\e[0;32m$(pwd)\n\e[m$ '

Итак, когда, например, Desktop, мое приглашение выглядит так:

Однако иногда, когда нажатие стрелки вверх для повторного запуска предыдущих команд, в начале запроса появляется случайная последовательность символов что, похоже, не уходит, если я не попал в enter, e. g.

Я никогда не ударил команду cd cd Desktop. Самое странное, что backspace даже не удалит первую из двух команд cd выше!

Любые предложения?

4
задан 25 April 2017 в 20:16

8 ответов

Вы должны убедиться, что непечатаемые символы в приглашении находятся в квадратных скобках, иначе bash не сможет правильно рассчитать размер подсказки. Я думаю, что я исправил это для вас:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
6
ответ дан 22 May 2018 в 23:15
  • 1
    Если вы используете $PWD вместо $(pwd), оболочке не нужно настраивать канал, разворачивать два новых процесса и вызывать одну внешнюю команду для каждого приглашения. :-) – David Foerster 25 April 2017 в 14:22
  • 2
    @DavidFoerster ха-ха спасибо! Прошло некоторое время с тех пор, как я вошел в мое приглашение. Правильный способ PS1 - использовать \w, но он меняет /home/zanna на ~ – Zanna 25 April 2017 в 14:30
  • 3
    Я знаю. Я тоже не был уверен, и мне пришлось искать это в руководстве. – David Foerster 25 April 2017 в 14:31

Вы должны убедиться, что непечатаемые символы в приглашении находятся в квадратных скобках, иначе bash не сможет правильно рассчитать размер подсказки. Я думаю, что я исправил это для вас:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
6
ответ дан 18 July 2018 в 14:19

Вы должны убедиться, что непечатаемые символы в приглашении находятся в квадратных скобках, иначе bash не сможет правильно рассчитать размер подсказки. Я думаю, что я исправил это для вас:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
6
ответ дан 24 July 2018 в 20:22

Вы должны убедиться, что непечатаемые символы в приглашении находятся в квадратных скобках, иначе bash не сможет правильно рассчитать размер подсказки. Я думаю, что я исправил это для вас:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
6
ответ дан 31 July 2018 в 12:46

Прежде всего большое спасибо @Zanna за то, что вы указали правильный путь.

Для более полного ответа я расширил решение, которое включает в себя:

a) cwd в зеленом цвете

b) в новой строке - ветвь git (если есть) в желтоватом цвете с красной звездой, если ветвь грязная

[d4 ] Для выполнения b необходимо ввести подсказку git

. Это выглядит как последняя строка в ~/.bashrc

export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ '

. Теперь приглашение будет расширяться до sth like это если вы находитесь в ветке git

подсказка git aware

2
ответ дан 22 May 2018 в 23:15
  • 1
    Если вы используете $PWD вместо $(pwd), оболочке не нужно настраивать канал, разворачивать два новых процесса и вызывать одну внешнюю команду для каждого приглашения. Кроме того, вам не нужно экспортировать PS1, и, вероятно, лучше, если вы этого не сделаете. :-) – David Foerster 25 April 2017 в 14:23
  • 2
    @DavidFoerster благодарит! Я соответствующим образом обновил свой ответ. – pkaramol 25 April 2017 в 14:49

Прежде всего большое спасибо @Zanna за то, что вы указали правильный путь.

Для более полного ответа я расширил решение, которое включает в себя:

a) cwd в зеленом цвете

b) в новой строке - ветвь git (если есть) в желтоватом цвете с красной звездой, если ветвь грязная

Для выполнения b необходимо ввести подсказку git

. Это выглядит как последняя строка в ~/.bashrc

export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ '

. Теперь приглашение будет расширяться до sth like это если вы находитесь в ветке git

подсказка git aware

2
ответ дан 18 July 2018 в 14:19

Прежде всего большое спасибо @Zanna за то, что вы указали правильный путь.

Для более полного ответа я расширил решение, которое включает в себя:

a) cwd в зеленом цвете

b) в новой строке - ветвь git (если есть) в желтоватом цвете с красной звездой, если ветвь грязная

Для выполнения b необходимо ввести подсказку git

. Это выглядит как последняя строка в ~/.bashrc

export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ '

. Теперь приглашение будет расширяться до sth like это если вы находитесь в ветке git

подсказка git aware

2
ответ дан 24 July 2018 в 20:22
  • 1
    Если вы используете $PWD вместо $(pwd), оболочке не нужно настраивать канал, разворачивать два новых процесса и вызывать одну внешнюю команду для каждого приглашения. Кроме того, вам не нужно экспортировать PS1, и, вероятно, лучше, если вы этого не сделаете. :-) – David Foerster 25 April 2017 в 14:23
  • 2
    @DavidFoerster благодарит! Я соответствующим образом обновил свой ответ. – pkaramol 25 April 2017 в 14:49

Прежде всего большое спасибо @Zanna за то, что вы указали правильный путь.

Для более полного ответа я расширил решение, которое включает в себя:

a) cwd в зеленом цвете

b) в новой строке - ветвь git (если есть) в желтоватом цвете с красной звездой, если ветвь грязная

Для выполнения b необходимо ввести подсказку git

. Это выглядит как последняя строка в ~/.bashrc

export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ '

. Теперь приглашение будет расширяться до sth like это если вы находитесь в ветке git

подсказка git aware

2
ответ дан 31 July 2018 в 12:46
  • 1
    Если вы используете $PWD вместо $(pwd), оболочке не нужно настраивать канал, разворачивать два новых процесса и вызывать одну внешнюю команду для каждого приглашения. Кроме того, вам не нужно экспортировать PS1, и, вероятно, лучше, если вы этого не сделаете. :-) – David Foerster 25 April 2017 в 14:23
  • 2
    @DavidFoerster благодарит! Я соответствующим образом обновил свой ответ. – pkaramol 25 April 2017 в 14:49

Другие вопросы по тегам:

Похожие вопросы: