Masquer le répertoire de travail actuel dans le terminal


133

Par défaut, l'invite du terminal affiche quelque chose comme:

user@system:/folder1/folder2/folder3/folder4$

plus vous allez profondément dans le système de fichiers, moins vous aurez d'espace pour taper des commandes. Puis-je changer cela pour montrer seulement quelque chose comme:

>

Je veux dire, je peux simplement taper pwdpour montrer où je suis. ;)


1
Cela devrait être un commentaire mais je ne peux pas commenter, désolé. En plus de masquer le répertoire actuel, la valeur PS1 suivante séparera visuellement vos commandes bash:export PS1="\n___"
Hello World

expérimenté sur les solutions d'Oli. Les polices de couleur fonctionnent bien dans le terminal: export PS1 = '[\ 033 [0; 35m] \ h [\ 033 [0; 33m] \ w [\ 033 [00m]:'
linbianxiaocao

Réponses:


153
export PS1='\u@\h: '

Cela se traduit par oli@bert:pour mon invite.

Si vous voulez vraiment quelque chose d'aussi minimaliste que vous le souhaitez, essayez ceci:

export PS1='> '

Vous pouvez la joindre à la fin de votre ~/.bashrcfichier pour qu'il persiste entre les connexions.

Vous pouvez également faire preuve de créativité avec certaines couleurs. Voici ce que j'utilise sur mes serveurs:

export PS1='\[\033[0;35m\]\h\[\033[0;33m\] \w\[\033[00m\]: '

Donner (c'est plus facile à voir sur un fond noir):

Mes terminaux

Glossaire des caractères acceptables dans PS1


2
Vous pouvez également avoir des nouvelles lignes (\ n) dans le cadre de l'invite, de sorte que vous puissiez mettre toutes les informations et le '>' sur des lignes séparées.
ak2

Croyez-le ou non, j'ai rencontré pour la première fois ce type de personnalisation de shell "extrême" dans msysGit. J'ai été immédiatement converti au monde de bash. Avoir toutes les informations (mon répertoire actuel, la branche actuelle extraite du dépôt Git, l'état de l'index Git ...), il y avait là tout simplement génial. Je prévois de faire quelque chose de similaire avec l'installation Ubuntu que j'ai récemment installée sur un vieil ordinateur portable (à côté de Windows XP).
dgw

3
quel est le format utilisé pour la mise en place des couleurs?
Rakib

1
@ SyedRakibAlHasan Essayez echo -e "\e[31mHello World\e[0m"ou echo -e "\033[31mHello\e[0m World"dans un terminal, cela devrait vous donner un indice. source
daka

103

Juste pour développer la réponse d'Oli (et pour que j'ai un marque-page pour ces symboles abrégés):

L'invite bash ( stefano@linux:~$) n'est que la première d'une paire d'invites que vous pourriez voir:

  • PS1 : l'invite par défaut que vous voyez lorsque vous ouvrez un shell

    Sa valeur est stockée dans une variable d’environnement appelée PS1. Pour voir sa valeur, tapez

    echo $PS1

    Cela vous donnera quelque chose comme

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

    Pour le changer, vous pouvez définir une nouvelle valeur pour la variable:

    export PS1="\u > "

    Cela se traduira par une invite comme ceci:

    stefano > 
  • PS2 : est votre invite secondaire. Ceci est montré quand une commande n'est pas finie. Tapez echo "asdet appuyez sur Entrée, l'invite secondaire vous permettra d'entrer plus de lignes jusqu'à ce que vous fermiez les guillemets.

  • PS3 est l'invite utilisée pour select(2)

  • PS4 est l'invite utilisé pour les texte alternatif traces de pile (par défaut: +)

Pour rendre les modifications permanentes, vous les ajoutez à la fin .bash_profile(ou .bashrc, voir cette question ) dans votre répertoire personnel.

Voici une liste plus ou moins complète de raccourcis que vous pouvez utiliser pour les composer:

  • \a     Le caractère "cloche"
  • \A     24h heure
  • \d     Date (par exemple, mardi 21 décembre)
  • \e     Le personnage 'évasion'
  • \h     Nom d'hôte (jusqu'au premier ".")
  • \H     Nom d'hôte
  • \j     Nombre d'emplois en cours d'exécution (ps)
  • \l     Tty actuel
  • \n     Saut de ligne
  • \t     Temps (hh: mm: ss)
  • \T     Heure (hh: mm: ss, format 12h)
  • \r     Retour de chariot
  • \s     Shell (c'est-à-dire bash, zsh, ksh ..)
  • \u     Nom d'utilisateur
  • \v     Version Bash
  • \V     Full Bash release string
  • \w     Répertoire de travail actuel
  • \W     Dernière partie du répertoire de travail actuel
  • \!     Indice actuel dans l'histoire
  • \#     Index de commande
  • \$     Un "#" si vous êtes root, sinon "$"
  • \\     Backslash littéral
  • \@     Heure (format 12h avec am / pm)

Vous pouvez bien sûr insérer n'importe quelle chaîne littérale, et n'importe quelle commande:

export PS1="\u \$(pwd) > "

$(pwd)se tient à la place de "la sortie de" pwd.

  • Si la substitution de commande est échappée, comme dans \$(pwd), elle est évaluée chaque fois que l'invite est affichée, sinon, comme dans $(pwd), elle n'est évaluée qu'une fois au démarrage de bash.

Si vous souhaitez que votre invite comporte des couleurs, vous pouvez utiliser les codes de couleur de bash pour le faire. Le code comprend trois parties:

40;33;01
  • La première partie avant le point-virgule représente le style de texte.

    • 00 = aucun
    • 01 = gras
    • 04 = trait de soulignement
    • 05 = clignote
    • 07 = inverse
    • 08 = caché
  • Les deuxième et troisième parties sont la couleur et la couleur de fond:

    • 30 = noir
    • 31 = rouge
    • 32 = vert
    • 33 = jaune
    • 34 = bleu
    • 35 = magenta
    • 36 = cyan
    • 37 = blanc

Chaque partie peut être omise, en partant de la gauche. c'est-à-dire que "1" signifie gras, "1; 31" signifie gras et rouge. Et vous obtiendrez votre terminal pour imprimer en couleur en échappant l'instruction avec \33[et en la terminant par un m. 33, ou 1B en hexadécimal, est le signe ASCII "ESCAPE" (un caractère spécial dans le jeu de caractères ASCII). Exemple:

"\33[1;31mHello World\33[m"

Imprime "Hello World" en rouge vif.


J'ai annexé export PS1='\[\033[1;31m\]\w\[\033[00m\] \$> 'à, /etc/bash.bashrcmais rien ne semblait changer ... cela fonctionne sur une session, mais je ne peux pas sembler le rendre permanent.
Jared Tritsch

8

Une autre solution consiste à raccourcir le chemin du répertoire de travail lorsque celui-ci est trop long: découpez le répertoire de travail de l'invite de commande du terminal.

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

Exemple: ~ / short.pwd.py

import os
from commands import getoutput
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) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

Maintenant testez-le depuis un terminal:

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

Si le résultat vous convient, ajoutez simplement la commande dans votre ~ / .bashrc


Exa ... ~ / short.pwd.py, exporter ... ~ / .short.pwd.py Je pense que les deux doivent être identiques. Soit vous mettez une commande supplémentaire aux deux endroits ou vous ne le faites pas du tout. Mais c'est une excellente réponse ..
MycrofD

7

J'ai souvent envie de faire ça temporairement. Voici ce que je fais:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

J'espère que ça aidera quelqu'un.


1

pour les utilisateurs de macOS:

open ~/.bash_profile

à la fin du fichier, ajoutez la ligne suivante et enregistrez-la

export PS1='\u:\w\$ '

résultat dans le répertoire personnel:

user: ~$

ici, pour l'utilisateur w pour le répertoire de travail actuel $ est d'inviter à afficher

vous pouvez essayer les styles suivants:

export PS1='$ '

juste avoir $ comme invite, rien d’autre. juste comme:

$ 

0

La chose qui m'a aidé était: export PS1 = '$'

Pour avoir cela à chaque fois que vous ouvrez le terminal, écrivez la commande à la fin du fichier .bashrc que vous pouvez ouvrir avec «cd» suivi de «gedit .bashrc».

J'espère que cela t'aides. Travaillé pour moi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.