43 votes

Réduisez le répertoire de travail de l'invite de commande du terminal

Lorsque vous utilisez le terminal dans une structure de dossiers profonde, parfois l'invite peut occuper la majeure partie de la ligne. Y a-t-il un moyen de raccourcir le répertoire de travail ? Je sais que je peux faire

PS1="\W >"

pour n'afficher que le répertoire actuel et pas le chemin complet, mais y a-t-il un moyen d'avoir quelque chose comme :

/home/smauel/de...ther/folder >

79voto

Steve Karg Points 11

Si vous utilisez bash4 (Ubuntu 9.10 et ultérieures dispose de bash4), l'option la plus simple est de simplement définir la variable PROMPT_DIRTRIM. par exemple :

PROMPT_DIRTRIM=2

Pour une option similaire à l'exemple de João Pinto, (qui fonctionnera dans les anciennes versions de bash et qui garantit que le composant du chemin n'est jamais plus long que 30 caractères), vous pouvez faire quelque chose comme ceci :

PS1='[\u@\h:$(p=${PWD/#"$HOME"/~};((${#p}>30))&&echo "${p::10}…${p:(-19)}"||echo "\w")]\$ '

32voto

Lorin Hochstein Points 11816

Créez un petit script python qui implémente la logique de rognage souhaitée.

Exemple: ~/.short.pwd.py

import os
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 33:
    pwd = pwd[:10]+'...'+pwd[-20:] # premiers 10 caractères + 20 derniers caractères
print '[%s@%s:%s] ' % (username, hostname, pwd)

Maintenant testez-le, depuis un terminal :

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

Si vous êtes satisfait du résultat, il suffit d'ajouter la commande à votre ~/.bashrc.

12voto

Bryan Rehbein Points 3947

Une autre solution à ce problème consiste à inclure un saut de ligne dans PS1, de sorte que le répertoire de travail et l'invite réelle apparaissent sur des lignes séparées, par exemple:

PS1="\w\n>"

4voto

Chris Sullivan Points 141

Ajoutez ceci à la fin de votre ~/.bashrc

split_pwd() {
        # Afficher des points de suspension uniquement pour les arbres de répertoires -gt 3
        # Sinon, utilisez le répertoire de travail par défaut comme remplacement \w actuel
        if [ $(pwd | grep -o '/' | wc -l) -gt 3 ]; then
                pwd | cut -d'/' -f1-3 | xargs -I{} echo {}"/../${PWD##*/}"
        else
                pwd
        fi
}

export PS1="\$(split_pwd) > "

Admettons que cela pourrait probablement être plus propre, mais je voulais essayer.

Sortie attendue pour les répertoires de plus de trois niveaux.

/home/chris/../Projets Node >

Sortie attendue pour les répertoires de Bureau et en arrière.

/home/chris/Bureau > 
/home/chris >  
/home

1voto

Masterwest Points 11

Cette petite addition à l'excellent réponse de @joão-pinto ajoute le nom de l'environnement virtuel lorsque vous exécutez la commande workon.

import os
from platform import node
hostname = node().split('.')[0]
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)

# vérifier l'existence de l'environnement virtuel
ve = os.getenv('VIRTUAL_ENV')

if ve:
    venv = '(`basename \"$VIRTUAL_ENV\"`)'
else:
    venv = ''

if len(pwd) > 33:
    pwd = pwd[:10]+'...'+pwd[-20:] # premiers 10 caractères+derniers 20 caractères
print '%s[%s@%s:%s] ' % (venv, username, hostname, pwd)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X