Как сократить текущий путь к каталогу, отображаемый на терминале?


17

Если я нахожусь в глубоком каталоге, скажем:

~/Desktop/Dropbox/School/2017/C/A3/

затем, когда я открываю терминал, он говорит

bob@bob-ubuntu:~/Desktop/Dropbox/School/2017/C/A3/$

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

bob@bob-ubuntu: A3/$

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

Ответы:


12

Вам нужно изменить PS1в вашем файле запуска оболочки (вероятно .bashrc).

Если он уже есть, его настройки будут содержать то \w, что дает ваш рабочий каталог. Измените это на \W(верхний регистр). Выйдите и снова, или выполните:

. .bashrc

(или как там у вас).

Если его там нет, добавьте что-то вроде:

PS1='\u@\h: \W:\$'

к .bashrcили любой другой . Посмотрите PS1на bashстранице руководства, чтобы получить больше идей.

Быть осторожен; bashможет использовать несколько более одного файла инициализации, например .bashrcи .bash_profile; может быть, PS1это установлено в общесистемном. Но вы можете переопределить это в одном из ваших собственных файлов.


23

Начиная с bash 4, простой способ сократить глубину директории в командной строке - использовать приведенную ниже команду в вашем файле bashrc. Просто не забудьте повторно открыть свой терминал, а также число (т.е. 1) указывает глубину каталога, который нужно показать.

PROMPT_DIRTRIM = 1


4
Это именно то, что я искал. Установка чего-то похожего export PROMPT_DIRTRIM=3на ваш .bashrc- это идеальная середина между \Wи \w. См: gnu.org/software/bash/manual/html_node/Bash-Variables.html
spkane

3

Предполагая, что вы используете bash, измените строку приглашения (переменная PS1), чтобы она \Wвместо \w.

например, если ваш PS1 в настоящее время \u@\h:\w\$, установите его на\u@\h:\W\$

Чтобы сделать это постоянным, вам придется изменить его в файлах запуска bash - например, ~/.bash_profileили ~/.bashrc.

смотрите man bashи ищите PROMPTINGполную информацию и список специальных символов с обратной косой чертой.


У меня есть 4 упоминания о PS1. Я изменяю все 4?
K Split X

4 упоминания где? в ~ / .bash_profile? изменить все экземпляры \wв PS1 на \W. или вы можете просто установить подсказку на что угодно в нижней части скрипта.
cas

1

в этом случае вам придется редактировать PS1 ,

В этом случае у \wвас будет команда или переменная, которая показывает сокращенный путь:

оригинальный PS1

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'

изменить на

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]${PWD##*/}\[\033[00m\]\$'

Обратите внимание, что имя пользователя будет застраховано до ~, если вы находитесь в своей домашней директории!

чтобы избежать этого, вам понадобятся несколько команд, застрахованных в $ {PWD ## * /}, например

if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi

новый PS1 будет выглядеть следующим образом

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]`if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi`\[\033[00m\]\$'

oOps, пока я пытаюсь спасти мир, у меня не было идеи | прощение \ W


1

Это портативно для всех shоболочек.

Назначьте PS1в один из ваших файлов запуска оболочки:

PS1='${PWD##*/} $ '

Приглашение будет выглядеть

dir $

Где dirнаходится базовое имя текущего каталога.

$PWDПеременная содержит текущий путь к каталогу, и ${PWD##*/}лишит все вплоть до последнего/ в этом пути.

Одинарные кавычки не позволяют форме оболочки оценивать подстановку переменных во время присваивания (значение $PS1будет оцениваться при каждом отображении подсказки).

PS1Переменная не должна быть экспортирована как он используется только в текущей оболочке.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.