Jak skrócić bieżącą ścieżkę katalogu pokazaną na terminalu?


17

Jeśli jestem w głębokim katalogu, powiedzmy:

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

wtedy kiedy otwieram terminal, mówi

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

a potem piszę moje polecenie. To jest bardzo długie i każda linia, którą piszę w terminalu, przechodzi do następnej linii. Chcę wiedzieć, czy istnieje sposób, aby wyświetlał tylko mój bieżący katalog. Chcę, aby wyświetlało się:

bob@bob-ubuntu: A3/$

W ten sposób wszystko jest jasne i zawsze mogę pwdzobaczyć cały mój katalog. Po prostu nie chcę, aby cały katalog był widoczny w terminalu, ponieważ zajmuje zbyt dużo miejsca.

Odpowiedzi:


12

Musisz zmodyfikować PS1w pliku startowym powłoki (prawdopodobnie .bashrc).

Jeśli już tam jest, jego ustawienie będzie zawierać \w, co daje katalog roboczy. Zmień to na \W(wielkie litery). Wyloguj się i zaloguj ponownie lub wykonaj:

. .bashrc

(lub cokolwiek to jest plik).

Jeśli go nie ma, dodaj coś takiego:

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

do .bashrclub cokolwiek. Spójrz w górę PS1w bashstronę ręcznego, aby uzyskać więcej pomysłów.

Bądź ostrożny; bashmoże użyć kilku więcej niż jednego pliku inicjalizacji, np. .bashrci .bash_profile; może być PS1ustawiony w systemie. Ale możesz to zmienić w jednym ze swoich plików.


23

Od wersji bash 4 prostym sposobem na zmniejszenie głębokości katalogu w wierszu poleceń jest użycie poniższego polecenia w pliku bashrc. Pamiętaj tylko, aby ponownie otworzyć terminal, a także liczba (tj. 1) określa głębokość katalogu do wyświetlenia.

PROMPT_DIRTRIM = 1


4
Właśnie tego dokładnie szukałem. Ustawienie czegoś takiego jak export PROMPT_DIRTRIM=3w twoim .bashrcjest idealnym pośrednikiem między \Wa \w. Zobacz: gnu.org/software/bash/manual/html_node/Bash-Variables.html
spkane

3

Zakładając, że używasz bash, zmień ciąg zachęty (zmienna PS1), aby \Wzamiast niego \w.

np. jeśli twój PS1 jest obecnie \u@\h:\w\$ , ustaw go na\u@\h:\W\$

Aby to było trwałe, będziesz musiał to zmienić w plikach startowych bash - np ~/.bash_profile~/.bashrc . Lub .

zobacz man bashi wyszukaj PROMPTINGpełne szczegóły oraz listę znaków specjalnych, które uniknęły ukośnika.


Mam 4 wzmianki o PS1 Czy mogę zmienić wszystkie 4?
K Split X

4 wspomina gdzie? w ~ / .bash_profile? zmiana wszystkich instancji \wPS1 na nie powinna zaszkodzić \W. lub możesz po prostu ustawić monit na cokolwiek chcesz na dole skryptu.
cas

1

w takim przypadku będziesz musiał edytować PS1 ,

insted \w się polecenia lub zmiennej, która pokazuje skróconą ścieżkę:

oryginalny 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\]\$'

zmień na

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

Pamiętaj, że spowoduje to wstawienie nazwy użytkownika ~ jeśli jesteś w swoim domu, reż!

aby tego uniknąć, będziesz potrzebował kilku poleceń $ {PWD ## * /} np

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

nowy PS1 będzie wyglądał następująco

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, kiedy próbuję uratować świat, nie miałem Pomysłu | zapomniałem \ W


1

Jest to przenośne dla wszystkich shpowłok.

Przypisz do PS1jednego z plików startowych powłoki:

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

Znak zachęty będzie wyglądał

dir $

Gdzie dirjest podstawowa nazwa bieżącego katalogu.

$PWDZmienna zawiera aktualną ścieżkę i ${PWD##*/}będzie rozebrać wszystko włącznie ostatni/ w tej ścieżce.

Pojedyncze cudzysłowy uniemożliwiają formie powłoki ocenę podstawienia zmiennej w momencie przypisania (wartość $PS1zostanie oszacowana za każdym razem, gdy zostanie wyświetlony monit).

PS1Zmienna nie powinny być wywożone jest używany tylko przez bieżącej powłoki.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.