приглашение bash: показать текущий каталог в конце строки

приглашение bash: показать текущий каталог в конце строки

Как заставить мою командную строку bash отображать что-либо вконецстроки (с курсором, как обычно, в начале той же строки)? В частности, я хочу отобразить сокращенную односимвольную подсказку, например $или >после которой я могу ввести свою команду. Но я хочу иметь возможность видеть текущий рабочий каталог в конце строки, где он не будет "на виду".

Мне все равно, что произойдет, если я введу очень длинную команду. Она может перезаписать текущий рабочий каталог или что там еще отобразит моя подсказка.

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

решение1

Мне удалось настроить PS1 так, чтобы в конце строки приглашения выводился текущий путь:

PS1='\[$(for ((i=1; i < COLUMNS - ${#PWD} - 3; ++i)) ; do printf " " ; done ; printf "$PWD")\]'

Но есть несколько проблем, которые мне не удалось решить:

  1. Путь исчезает при нажатииBackspace
  2. Несмотря на то, что все выражение заключено в маркер нулевой ширины \[...\], как только вы печатаете также $или >, курсор перемещается в крайнее правое положение.

Я видел, как люди использовали PROMPT_COMMAND=pwdвместо этого отображение пути, но это сокращает количество строк, содержащих ваши команды в терминале.

Другой вариант — настроить терминал или screen/tmux для отображения пути где-либо. Например, следующее работает в xterm:

PS1='\[\e[m\e]0;\W\a\]$ '

Последовательность \e[m\e]0;...\aзадает заголовок окна. На экране это "\033k\033\0134\033kTITLE\033\0134".

Связанный контент