Comment raccourcir le chemin du répertoire actuel affiché sur le terminal?

17

Si je suis dans un répertoire profond, disons:

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

puis quand j'ouvre le terminal, ça dit

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

puis j'écris ma commande. C'est très long et chaque ligne que j'écris dans le terminal passe à la ligne suivante. Je veux savoir s'il existe un moyen pour qu'il affiche uniquement mon répertoire actuel. Je veux qu'il affiche:

bob@bob-ubuntu: A3/$

De cette façon, c'est beaucoup plus clair, et je peux toujours faire pwdpour voir tout mon répertoire. Je ne veux tout simplement pas que le répertoire entier soit visible dans le terminal car il prend trop de place.

K Split X
la source

Réponses:

12

Vous devez modifier PS1dans votre fichier de démarrage du shell (probablement .bashrc).

S'il est déjà là, son paramètre contiendra \w, ce qui donne votre répertoire de travail. Remplacez-le par \W(majuscule). Déconnectez-vous et reconnectez-vous, ou faites:

. .bashrc

(ou quel que soit votre fichier).

Si ce n'est pas le cas, ajoutez quelque chose comme:

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

à .bashrcou autre. Recherchez PS1dans la bashpage de manuel pour avoir plus d'idées.

Faites attention; bashpeut utiliser plusieurs fichiers d'initialisation, par exemple .bashrcet .bash_profile; il se peut que cela PS1soit défini à l'échelle du système. Mais vous pouvez remplacer cela dans l'un de vos propres fichiers.

Bob Eager
la source
23

Depuis bash 4, le moyen simple de raccourcir la profondeur du répertoire en ligne de commande est d'utiliser la commande ci-dessous dans votre fichier bashrc. N'oubliez pas de rouvrir votre terminal et le nombre (c'est-à-dire 1) spécifie la profondeur du répertoire à afficher.

PROMPT_DIRTRIM = 1

Esmaeil MIRZAEE
la source
4
Ceci est exactement ce que je cherchais. Mettre quelque chose comme export PROMPT_DIRTRIM=3dans votre .bashrcest le parfait compromis entre \Wet \w. Voir: gnu.org/software/bash/manual/html_node/Bash-Variables.html
spkane
3

En supposant que vous utilisez bash, modifiez la chaîne d'invite (variable PS1) pour qu'elle ait la \Wplace de \w.

Par exemple, si votre PS1 est actuellement \u@\h:\w\$, réglez-la sur\u@\h:\W\$

Pour rendre cela permanent, vous devrez le changer dans vos fichiers de démarrage bash - par exemple ~/.bash_profileou ~/.bashrc.

voir man bashet rechercher pour plus PROMPTINGde détails et une liste de caractères spéciaux avec barre oblique inverse.

cas
la source
J'ai 4 mentions de PS1 Est-ce que je change les 4?
K Split X
4 mentionne où? dans ~ / .bash_profile? il ne devrait pas faire de mal de changer toutes les instances de \wPS1 en \W. ou vous pouvez simplement définir l'invite à tout ce que vous voulez au bas du script.
cas
1

dans ce cas, vous devrez éditer PS1 ,

Au début \w, vous aurez une commande ou une variable qui montre le chemin raccourci:

PS1 d'origine

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

le changer en

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

Notez que cela mettra le nom d'utilisateur insteed de ~ si vous êtes dans votre répertoire personnel!

pour éviter cela, vous aurez besoin de quelques commandes insteed de $ {PWD ## * /} par exemple

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

la nouvelle PS1 ressemblera à ce qui suit

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 pendant que j'essaie de sauver le monde, je n'ai eu aucune idée | oublié le \ W

Jonas
la source
1

Ceci est portable pour tous les shobus.

Attribuez-le à l' PS1un de vos fichiers de démarrage du shell:

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

L'invite ressemblera à

dir $

direst le nom de base du répertoire actuel.

La $PWDvariable contient le chemin d'accès au répertoire actuel et ${PWD##*/}supprimera tout le contenu jusqu'au dernier /chemin inclus dans ce chemin.

Les guillemets simples empêchent le formulaire shell d'évaluer la substitution de variable au moment de l'affectation (la valeur de $PS1sera évaluée chaque fois que l'invite est affichée).

La PS1variable ne doit pas être exportée car elle est uniquement utilisée par le shell actuel.

Kusalananda
la source
0

https://github.com/chrissound/SodiumSierraStrawberry

Vous permet de tronquer un chemin comme:

À partir de: / accueil / sodium / Projets / Personnel / Sierra / Super / Long / Chemin / HolyAvacado

À: »Projets / Sie… / Sup… / Lon… / Pat… / HolyAvacado /

Chris Stryczynski
la source