Je suis un grand fan du terminal: que vous utilisiez une poignée de commandes (ou plus!) Pour améliorer votre processus de développement, ou que vous vous en serviez simplement pour déplacer rapidement vos lecteurs et ouvrir des fichiers et des dossiers, la ligne de commande est la suivante: un outil génial. Cependant, si vous l'utilisez souvent, vous voudrez le personnaliser selon vos besoins. Je vais vous montrer comment faire cela aujourd'hui!
On me demande souvent: "Comment avez-vous obtenu votre invite de commande pour qu'elle ressemble à cela?" Eh bien, dans ce tutoriel, je vais vous montrer exactement comment le faire. C'est assez simple et ne vous demandera pas trop de temps.
Je devrais noter que ce que je vous montre est spécifiquement pour le shell bash; C'est le shell par défaut sur Mac et la plupart des systèmes Linux. Si vous souhaitez une invite bash sous Windows, vous pouvez consulter Cygwin..
Avant de commencer, parlons un instant de la façon dont vous personnalisez votre invite bash. Ce n'est pas tout à fait la même chose qu'une application moyenne: il n'y a pas de panneau de préférences. Vos personnalisations sont stockées dans un fichier. Si vous utilisez Linux (ou utilisez Cygwin), ce sera votre .bashrc
fichier; sur Mac, c'est votre .bash_profile
fichier. Dans les deux cas, ce fichier est conservé dans votre répertoire personnel (si vous n'êtes pas sûr de son emplacement pour une installation Cygwin, exécutez la commande echo $ HOME
). Notez que je ne parlerai que du .bashrc
fichier à partir de maintenant, mais utilisez le .bash_profile
si vous êtes sur un Mac.
Notez que sur les Mac (et peut-être même les machines Linux; je ne suis pas sûr), les fichiers commençant par un point sont masqués par défaut. Pour les montrer, lancez ces deux lignes dans le terminal
Par défaut, écrivez com.apple.finder AppleShowAllFiles TRUE killall Finder
Alors, qu'est-ce qui se passe dans ça .bashrc
fichier? Chaque ligne est en fait une commande que vous pouvez exécuter sur la ligne de commande. En fait, voici comment fonctionnent ces fichiers de configuration: Lorsque vous ouvrez la console, toutes les commandes que vous avez écrites dans le fichier de configuration sont exécutées pour configurer votre environnement. Donc, si vous voulez juste essayer une partie de ce que je vais montrer ci-dessous, tapez-le simplement sur la ligne de commande elle-même. La simplicité est belle ici.
PS1
Commençons par une définition. le rapide est ce que vous voyez au début de la ligne, chaque fois que vous appuyez sur Entrée sur la ligne de commande. Voici quels sont les paramètres par défaut pour le Mac:
Dans ce cas, l'invite est andrews-macbook: ~ screencast $
. Il y a quelques variables ici: andrew-macbook
est le nom de cet ordinateur, ~
est le répertoire actuel (le répertoire de base) et screencast
est le nom d'utilisateur. Personnalisons un peu.
Ouvrez soit votre .bashrc
fichier. La façon dont nous définissons les informations affichées dans l’invite s’effectue avec PS1
variable. Ajoutez ceci au fichier:
PS1 = '->'
Notez que je ne mets pas d'espaces de part et d'autre du signe égal; c'est nécessaire. Enregistrez ce fichier dans votre répertoire personnel et rouvrez une fenêtre de terminal. Maintenant, vous devriez avoir une invite qui ressemble à ceci:
Je ferai remarquer ici que si vous trouvez fastidieux de fermer et de rouvrir votre terminal chaque fois que vous modifiez votre .bashrc
ou .bash_profile
, un raccourci: vous pouvez charger n’importe quel fichier de personnalisation de bash avec le la source
commander. Exécutez ceci dans votre terminal:
source ~ / .bashrc
Encore trop longtemps? Eh bien, une seule période (.
) est un alias pour la source
. Heureux maintenant? Si vous êtes rapide, vous réaliserez que nous pouvons utiliser le la source
commande d'inclure d'autres fichiers dans notre .bashrc
fichier, si vous voulez le scinder pour garder le contrôle.
Personnalisons un peu plus notre invite. Nous pouvons utiliser des variables intégrées dans la chaîne à laquelle nous attribuons PS1
inclure des informations utiles dans l'invite; en voici quelques unes utiles:
\ré
: Rendez-vous amoureux\ h
: Hôte\ n
: Nouvelle ligne\ t
: Temps\ u
: Nom d'utilisateur\ W
: Répertoire de travail actuel\ w
: Chemin complet du répertoire actuelDonc, si vous configurez votre invite à ceci:
PS1 = '\ n \ W \ n [\ h] [\ u] ->'
vous devriez voir quelque chose comme ceci:
Remarquez quelques choses ici: premièrement, nous utilisons un ensemble des variables présentées ci-dessus pour nous donner plus d'informations. Mais deuxièmement, nous incluons quelques lignes nouvelles et nous obtenons une invite plus intéressante: nous avons le répertoire actuel sur une ligne, puis l’invite réelle sur la ligne suivante. Je préfère mon invite de cette façon, car j’ai toujours la même quantité d’espace pour écrire mes commandes, quelle que soit la longueur du chemin du répertoire en cours. Cependant, il y a une meilleure façon de faire cela, alors regardons cela maintenant.
PROMPT_COMMAND
La meilleure façon de faire est d'utiliser le PROMPT_COMMAND
variable; le contenu de cette variable n'est pas simplement une chaîne, comme avec PS1
. C'est en fait une commande qui a été exécutée avant que bash affiche l'invite. Pour essayer, ajoutons ceci à notre .bashrc
:
PROMPT_COMMAND = 'echo "vient avant l'invite"'
Nous utilisons le écho
commande ici; si vous ne le connaissez pas, il vous suffit de lui passer une chaîne et il l'écrira sur le terminal. En soi, ce n'est pas incroyablement utile (même si vous pouvez l'utiliser pour afficher des variables: echo $ PS1
), mais c’est génial quand on l’utilise avec d’autres commandes, affichez donc leur sortie. Si vous avez ajouté la ligne ci-dessus, vous devriez voir ceci:
Faisons quelque chose de plus utile ici. Ecrivons une fonction bash que nous assignerons à PROMPT_COMMAND
. Essaye ça:
print_before_the_prompt () echo "vient avant l'invite" PROMPT_COMMAND = print_before_the_prompt
Si vous utilisez ceci, vous ne devriez pas voir une différence dans votre invite par rapport à ce que nous avons ci-dessus. Faisons en sorte que cela soit utile.
print_before_the_prompt () echo "$ USER: $ PWD" PROMPT_COMMAND = print_before_the_prompt PS1 = "->"
Voici ce que vous obtiendrez:
C'est un bon début, mais je veux faire un peu plus. Je vais utiliser le printf
commande au lieu de écho
car cela facilite l’inclusion de nouvelles lignes et de variables. Un bref historique sur le printf
commande: il faut plusieurs paramètres, le premier étant une sorte de template pour la chaîne à sortir. Les autres paramètres sont des valeurs qui seront substituées dans la chaîne de modèle, le cas échéant; nous verrons comment cela fonctionne.
Alors faisons ceci:
print_before_the_prompt () printf "\ n% s:% s \ n" "$ USER" "$ PWD"
Voir ceux % s
pièces dedans là? Cela signifie que "interprète la valeur de ce spot en tant que chaîne" ;; pour le contexte, nous pourrions aussi utiliser %ré
pour formater la valeur sous forme de nombre décimal. Comme vous pouvez le voir, nous avons deux % s
est dans le? template? chaîne et deux autres paramètres. Ceux-ci seront placés dans la chaîne où le % s
s sont. Notez également les nouvelles lignes au début et à la fin: la première donne simplement un peu de marge de manœuvre au terminal. Le dernier s'assure que l'invite (PS1
) sera imprimé sur la ligne suivante et non sur la même ligne que PROMPT_COMMAND
.
Vous devriez obtenir un terminal comme celui-ci:
Vous cherchez bien! Mais allons un peu plus loin. Ajoutons de la couleur à cela. Nous pouvons utiliser des codes spéciaux pour changer la couleur du texte dans le terminal. Il peut être assez décourageant d’utiliser le code lui-même, aussi j’aime copier cette liste de variables pour la couleur et l’ajouter en haut de la liste. .bashrc
fichier:
txtblk = '\ e [0; 30m' # Noir - Régulier txtred = "\ e [0; 31m" # Rouge txtgrn = "\ e [0; 32m" # Vert txtylw = "\ e [0; 33m" # Jaune txtblu = "\ e [0; 34m" # Blue txtpur = "\ e [0; 35m" # Violet txtcyn = "\ e [0; 36m" # Cyan txtwht = "\ e [0; 37m" # Blanc bldblk = "\ e [1; 30m" # Black - Bold bldred = "\ e [1; 31m" # Red bldgrn = "\ e [1; 32m" # Green bldylw = "\ e [1; 33m" # Yellow bldblu = "\ e [1; 34m" # Blue bldpur = "\ e [1; 35m" # Violet bldcyn = "\ e [1; 36m" # Cyan bldwht = "\ e [1; 37m" # Blanc unkblk = "\ e [4; 30m "# Noir - Souligné undred =" \ e [4; 31m "# Rouge undgrn =" \ e [4; 32m "# Vert undylw =" \ e [4; 33m "# Jaune undblu =" \ e [4; 34m "# Blue undpur =" \ e [4; 35m "# Violet undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# White bakblk =" \ e [ 40m "# Noir - Fond bakred =" \ e [41m "# Rouge badgrn =" \ e [42m "# Vert bakylw =" \ e [43m "# Jaune bakblu =" \ e [44m "# Bleu bakpur =" \ e [45m "# Violet bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# Blanc txtrst =" \ e [0m "# Réinitialisation du texte
Il y a une méthode à cette folie: les premiers jeux sont allumés en coloration normale. La deuxième série active les couleurs vives. La troisième série active la coloration soulignée. Et cette quatrième série active la coloration de l’arrière-plan. Ce dernier réinitialise la coloration à la normale. Alors, utilisons ces!
print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s \ n $ txtrst" "$ USER" "$ PWD"
Ici, j'ai ajouté $ txtred
avant le premier % s
, et $ bldgrn
avant la seconde % s
; puis, à la fin, j'ai réinitialisé la couleur du texte. Vous devez le faire, car une fois que vous avez défini une couleur, elle sera conservée jusqu'à ce que vous utilisiez une nouvelle couleur ou réinitialisiez la coloration. Vous remarquerez également que lorsque vous définissez une variable, nous ne la préfixons pas par un signe dollar; mais nous utilisons le signe dollar lorsque nous utilisons la variable: c'est ainsi que fonctionnent les variables bash. Cela nous donne les éléments suivants:
Passons à la dernière étape: ajouter des scripts pour nous donner encore plus d'informations..
Si vous avez visionné les screencasts fournis avec mon livre Getting Good with Git, vous vous souviendrez peut-être que certaines informations relatives au contrôle de version sont affichées dans mon invite. J'ai eu cette idée de l'excellent PeepCode? Advanced Command Line? screencast, qui partage cela, ainsi que de nombreux autres bons conseils.
Pour ce faire, nous devrons télécharger et créer le script qui trouve cette information. Rendez-vous sur le référentiel pour vcprompt, un script qui génère les informations de contrôle de version. Si vous connaissez le système de contrôle de version Mercurial, vous pouvez l'utiliser pour obtenir le référentiel, mais vous voudrez probablement cliquer sur ce lien 'zip' pour télécharger le code de script sous forme de fichier zip. Une fois le fichier décompressé, vous devez créer le script. Pour ce faire, juste CD
dans le dossier de script décompressé et exécutez la commande faire
. Une fois cette commande exécutée, vous devriez voir un fichier nommé 'vcprompt' dans le dossier. Ceci est le script exécutable.
Alors, comment utilisons-nous cela dans notre invite? Eh bien, cela nous amène à une importante piste de lapins: comment pouvons-nous? Installer? un script (comme celui-ci) afin que nous puissions l'utiliser dans le terminal? Toutes les commandes que vous pouvez exécuter sur le terminal se trouvent dans un tableau défini de dossiers. ce tableau est la variable PATH. Vous pouvez voir une liste des dossiers actuellement dans votre PATH en lançant echo $ PATH
. Cela pourrait ressembler à quelque chose comme ça:
/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin
Ce que nous devons faire est de mettre le script exécutable vcprompt
dans un dossier qui est sur notre chemin. Ce que j’aime faire (et oui, j’ai appris cette astuce à partir du screencast de PeepCode également), c’est de créer un dossier appelé "bin" (abréviation de "binary") dans mon répertoire personnel et de l’ajouter à mon chemin PATH. Ajoutez ceci à votre .bashrc
:
export PATH = ~ / bin: $ PATH
Ceci configure PATH sur ~ / bin
, plus tout ce qui était déjà dans la variable PATH. Si nous mettons maintenant que vcprompt
script dans ~ / bin, nous pourrons l'exécuter dans n'importe quel dossier du terminal.
Alors, ajoutons maintenant ceci à notre invite:
print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt)"
J'ai ajouté $ txtpur% s
au? modèle? chaîne, et ajouté le quatrième paramètre"$ (vcprompt)"
. L'utilisation du signe dollar et des parenthèses exécutera le script et renverra le résultat. Maintenant, vous aurez ceci:
Notez que si le dossier n'utilise pas un contrôle de version, rien ne s'affiche. Mais si nous sommes dans un référentiel, nous obtenons le système de contrôle de version utilisé (Git, dans mon cas) et le nom de la branche. Vous pouvez personnaliser un peu cette sortie si vous le souhaitez: vérifiez le fichier Lisezmoi que vous avez téléchargé avec le code source du fichier. vcprompt
scénario.
Voici notre complète .bashrc
ou .bash_profile
fichier:
export PATH = ~ / bin: $ PATH txtblk = "\ e [0; 30m" # Noir - Normal txtred = "\ e [0; 31m" # Rouge txtgrn = "\ e [0; 32m" # Vert txtylw = " \ e [0; 33m "# Jaune txtblu =" \ e [0; 34m "# Bleu txtpur =" \ e [0; 35m "# Violet txtcyn =" \ e [0; 36m "# Cyan txtwht =" \ e [0; 37m "# Blanc bldblk =" \ e [1; 30m "# Noir - Gras bldred =" \ e [1; 31m "# Rouge bldgrn =" \ e [1; 32m "# Vert bldylw =" \ e [1; 33m "# Jaune bldblu =" \ e [1; 34m "# Bleu bldpur =" \ e [1; 35m "# Violet bldcyn =" \ e [1; 36m "# Cyan bldwht =" \ e [1 ; 37m "# White unkblk =" \ e [4; 30m "# Noir - Souligné undred =" \ e [4; 31m "# Rouge undgrn =" \ e [4; 32m "# Vert undylw =" \ e [4 ; 33m "# Jaune undblu =" \ e [4; 34m "# Bleu undpur =" \ e [4; 35m "# Violet undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# Blanc bakblk =" \ e [40m "# Noir - Arrière-plan bakred =" \ e [41m "# Rouge badgrn =" \ e [42m "# Vert bakylw =" \ e [43m "# Jaune bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Violet bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# Blanc txtrst =" \ e [0m "# Texte Réinitialiser print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt) " PROMPT_COMMAND = print_before_the_prompt PS1 =" -> "
C'est un cours intensif sur la personnalisation de votre invite bash. Si vous avez des questions, assurez-vous de les laisser dans les commentaires!