В системе с Ubuntu 14.04 и у bash
меня есть PS1
переменная, заканчивающаяся следующим содержанием:
\u@\h:\w\$
так что подсказка выглядит как
user@machinename:/home/mydirectory$
Однако иногда текущий каталог имеет длинное имя или находится внутри каталогов с длинными именами, так что приглашение выглядит
user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$
Это заполнит строку в терминале, и курсор перейдет на другую строку, которая раздражает.
Я хотел бы вместо этого получить что-то вроде
user@machinename:/home/mydirectory1/...another_long_name$
Есть ли способ определить PS1
переменную для «обтекания» и «сжатия» имени каталога, чтобы оно никогда не превышало определенного количества символов, получая более короткое приглашение?
Ответы:
Прежде всего, вы можете просто захотеть изменить
\w
с\W
. Таким образом, печатается только имя текущего каталога, а не весь его путь:Этого может быть недостаточно, если само имя каталога слишком длинное. В этом случае вы можете использовать
PROMPT_COMMAND
переменную для этого. Это специальная переменная bash, значение которой выполняется в виде команды перед отображением каждого приглашения. Таким образом, если вы установите это для функции, которая устанавливает желаемое приглашение в зависимости от длины пути вашего текущего каталога, вы можете получить желаемый эффект. Например, добавьте эти строки в ваш~/.bashrc
:Эффект выглядит так:
источник
Добавление в символьное возвращение - мое главное решение
Так что мое приглашение (в котором есть и другие вещи, что делает его еще длиннее) выглядит так:
Вы заметите, что $ возвращается как новая строка
Я достигаю этого с
Обратите внимание, что, хотя в отдельной строке, очень длинные деревья каталогов, такие как
/home/durrantm/Dropbox/96_2013_archive/work/code/ruby__rails
сокращены дот. е. «верхние 3 директории / _ / нижние две директории», что, как правило, меня волнует
Это гарантирует, что строка никогда не станет слишком длинной из-за длины дерева каталогов. Если вы всегда хотите полное дерево каталогов, просто настройте LOCATION, т.е.
источник
$
? (См. Это .)Создано ~ / .bash_prompt:
Добавлено в мой ~ / .bash_profile:
Выход:
источник
Не решение для сокращения длинных путей, а удобный способ получить лучший обзор при сохранении всей видимой информации о пути - это добавление новой строки перед последним символом. Таким образом, курсор всегда начинается в одном и том же столбце, даже если путь достаточно длинный, чтобы его обернуть, но ваши окна консоли должны быть достаточно высокими, чтобы не слишком быстро прокручивать предыдущие строки. Я удалил цветовые коды для большей ясности:
источник
Я использую это, он переносится на несколько строк и отступов по длине,
user@host
поэтому он предполагает, что токPS1
эффективно '\u@\h:\w$
'. Он не усекает путь и адаптируется к текущей ширине терминала. Он только разделяет путь/
, поэтому элегантно не обрабатывает действительно длинные каталоги (но сохраняет места для выделения / копирования). Это гарантирует, что у вас всегда будет как минимум 20 символов для ввода.Это работает, убирая магию
\w
(подходит только\w$
для этого)PS1
и заменяя ее$PWD
, затем оборачивая ее в виде простой строки символов. Он пересчитываетPS1
каждый раз исходное значение, которое сохраняется в нем_PS1
, это означает, что также сохраняются "невидимые" экранированные символы, моя полная строка исходного приглашенияxterm
и приглашение, выделенное жирным шрифтом:И конечный результат в терминале 80 столбцов:
Это работает с Bash-3.2, как
printf -v var
используется. Из-за различных сложностей потребуется некоторая корректировка для других вариацийPS1
.(Путь в строке заголовка xterm не оборачивается и не сокращается, что можно сделать, включив один из других ответов здесь в вышеуказанную функцию.)
источник
В качестве альтернативы, в моем .zshrc я сокращаюсь до первой буквы каждого каталога, если ширина пикселя превышает определенную ширину:
будет выглядеть так:
Вот функция zsh для этого:
Я на самом деле использую это, чтобы обновить заголовок терминала, чтобы с несколькими вкладками я мог точно определить, какая вкладка какая. Полный .zshrc для этого здесь .
Это очень удобно, поскольку сохраняет контекст и в zsh позволяет быстро заполнить каталог в том же формате. (например, при наборе
cd /h/m/s/<tab>
будет выполнено автозаполнениеcd /home/mydirectory1/second_directory
)источник
Попробуйте использовать этот скрипт Python . Он обрезает отдельные части имени пути, точно так же, как вы хотели в вашем вопросе. Он также использует многоточие Юникода, которое занимает только один столбец вместо трех.
Пример вывода для вашего пути (если задано ограничение в 30 символов):
Стоит отметить, что это решение правильно обрабатывает Unicode в именах каталогов с помощью
wcswidth
.${#PWD}
, который использовали другие ответы, будет неправильно определять визуальную ширину любого пути, содержащего символы UTF-8.источник