Как заставить мою командную строку bash отображать что-либо вконецстроки (с курсором, как обычно, в начале той же строки)? В частности, я хочу отобразить сокращенную односимвольную подсказку, например $
или >
после которой я могу ввести свою команду. Но я хочу иметь возможность видеть текущий рабочий каталог в конце строки, где он не будет "на виду".
Мне все равно, что произойдет, если я введу очень длинную команду. Она может перезаписать текущий рабочий каталог или что там еще отобразит моя подсказка.
В качестве альтернативы я не против, если подсказка заставит текущий рабочий каталог отображаться в правом верхнем углу или в левом верхнем углу, или в правом/левом нижнем углу экрана. Я просто не хочу, чтобы он был у меня перед глазами все время, но я хочу, чтобы он был виден.
решение1
Мне удалось настроить PS1 так, чтобы в конце строки приглашения выводился текущий путь:
PS1='\[$(for ((i=1; i < COLUMNS - ${#PWD} - 3; ++i)) ; do printf " " ; done ; printf "$PWD")\]'
Но есть несколько проблем, которые мне не удалось решить:
- Путь исчезает при нажатииBackspace
- Несмотря на то, что все выражение заключено в маркер нулевой ширины
\[...\]
, как только вы печатаете также$
или>
, курсор перемещается в крайнее правое положение.
Я видел, как люди использовали PROMPT_COMMAND=pwd
вместо этого отображение пути, но это сокращает количество строк, содержащих ваши команды в терминале.
Другой вариант — настроить терминал или screen/tmux для отображения пути где-либо. Например, следующее работает в xterm:
PS1='\[\e[m\e]0;\W\a\]$ '
Последовательность \e[m\e]0;...\a
задает заголовок окна. На экране это "\033k\033\0134\033kTITLE\033\0134"
.