50 votes

Comment faire pour que la fenêtre du terminal Apple change automatiquement de couleur lorsque je me connecte à un serveur spécifique ?

Lorsque je me connecte par ssh à un serveur de production distant, j'aimerais que la couleur de la fenêtre de mon terminal devienne vive et effrayante, de préférence rouge, pour m'avertir que je touche un serveur vivant et effrayant.

Comment puis-je faire en sorte qu'il détecte automatiquement que je me suis connecté à un endroit et, si cet endroit se trouve dans une liste spécifique, qu'il change le schéma de couleurs ?

Je veux mettre à jour le schéma de Terminal.app, mais je ne sais pas comment le faire dans un environnement purement linux/unix.

0 votes

Pourquoi une solution purement linux/unix est-elle mauvaise ?

2 votes

@Milhous Parce que l'application Terminal.app d'OS X offre beaucoup plus de possibilités de personnalisation des styles que les personnalisations basées sur *nix, qu'il s'agisse de la police et des couleurs ANSI, de l'espacement des lignes et des caractères, de la couleur d'arrière-plan, de l'opacité et du flou. Les styles de l'application Terminal sont très réussis lorsqu'ils sont adaptés avec goût, et nous sommes nombreux, utilisateurs d'OS X, à aimer que nos ordinateurs aient l'air de dater des années 2010, et non des années 1980.

53voto

Yurii Soldak Points 628

Mettez le script suivant en ~/bin/ssh (assurer ~/bin/ est vérifié avant /usr/bin/ dans votre PATH) :

#!/bin/sh

HOSTNAME=`echo $@ | sed s/.*@//`

set_bg () {
  osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

on_exit () {
  set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
  production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
  *) set_bg "{0, 45000, 0, 50000}" ;;
esac

/usr/bin/ssh "$@"

N'oubliez pas de rendre le script exécutable en exécutant chmod +x ~/bin/ssh

Le script ci-dessus extrait le nom d'hôte de la ligne "username@host" (il suppose que vous vous connectez aux hôtes distants avec "ssh user@host").

Ensuite, en fonction du nom de l'hôte, il définit un fond rouge (pour les serveurs de production) ou un fond vert (pour tous les autres). Par conséquent, toutes vos fenêtres ssh auront un fond coloré.

Je suppose ici que votre fond par défaut est noir, donc le script ramène la couleur du fond au noir lorsque vous vous déconnectez du serveur distant (voir "trap on_exit").

Veuillez noter cependant que ce script ne suit pas la chaîne des connexions ssh d'un hôte à l'autre. En conséquence, l'arrière-plan sera vert dans le cas où vous vous connectez d'abord au serveur de test, puis à la production à partir de celui-ci.

0 votes

Vous, monsieur, venez d'illuminer ma journée.

1 votes

C'est bien, mais cela change l'arrière-plan de tous les terminaux, pas seulement celui qui est en cours. Un indice sur ce point ?

36voto

Chris Page Points 8523

Une fonctionnalité moins connue de Terminal est que vous pouvez définir le nom d'un profil de paramètres à un nom de commande et il sélectionnera ce profil lorsque vous créez un nouveau terminal via soit Shell > Nouvelle commande o Shell > Nouvelle connexion à distance .

Par exemple, dupliquez votre profil par défaut, nommez-le "ssh" et définissez sa couleur de fond en rouge. Utilisez ensuite Nouvelle commande à exécuter ssh host.example.com .

Il accepte également les arguments, de sorte que vous pouvez lui demander de choisir des paramètres différents pour différents hôtes distants, par exemple.

4 votes

Je n'arrive pas à croire à quel point c'est utile. C'est exactement ce que je cherchais.

6 votes

C'est la meilleure réponse pour moi. A noter que le nom du profil peut être une expression rationnelle, par exemple 'ssh .*myserver.*' correspond à 'ssh myserver', 'ssh -p 22 myserver.foo.com', etc.

0 votes

Fonctionne très bien sur Sierra. J'essaie maintenant de voir si je peux raccourcir le ssh quelque part au lieu de devoir ouvrir Nouvelle connexion à distance à chaque fois.

5voto

Milhous Points 6362

Vous pouvez définir la variable $PS1 dans votre .bashrc.

red='\e[0;31m'
PS1="$\[${red}\]"

EDIT : Pour ce faire, ouvrez le Terminal. Puis dites

#touch .bashrc

Vous pouvez ensuite ouvrir .bashrc dans textEdit ou dans TextWrangler et ajoutez les commandes précédentes.

0 votes

Comment faire exactement cela, et comment le terminal d'Apple sait-il qu'il doit aussi changer de couleur ?

3 votes

Créer un fichier ~/.bashrc sur le serveur que vous voulez changer en rouge. (pas sur votre mac)

2voto

skymt Points 2156

Les terminaux Unix compatibles Xterm disposent de séquences d'échappement standard pour définir les couleurs d'arrière-plan et de premier plan. Je ne suis pas sûr que Terminal.app les partage ; il devrait le faire.

case $HOSTNAME in
    live1|live2|live3) echo -e '\e]11;1\a' ;;
    testing1|testing2) echo -e '\e]11;2\a' ;;
esac

Le deuxième chiffre indique la couleur souhaitée. 0=par défaut, 1=rouge, 2=vert, etc. Ainsi, cet extrait, lorsqu'il est placé dans un .bashrc partagé, vous donnera un fond rouge sur les serveurs réels et un fond vert sur les serveurs de test. Vous devriez également ajouter quelque chose comme ceci pour réinitialiser l'arrière-plan lorsque vous vous déconnectez.

on_exit () {
    echo -e '\e]11;0\a'
}
trap on_exit EXIT

EDIT : Google a trouvé un moyen de définir la couleur de l'arrière-plan en utilisant AppleScript . Évidemment, cela ne fonctionne que lorsqu'il est exécuté sur la même machine que Terminal.app. Vous pouvez contourner ce problème à l'aide de quelques fonctions enveloppantes :

set_bg_color () {
    # color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
    osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

sshl () {
    set_bg_color "{45000, 0, 0, 50000}"
    ssh "$@"
    set_bg_color "{0, 0, 0, 50000}"
}

Vous devrez vous souvenir d'exécuter sshl au lieu de ssh lorsque vous vous connectez à un serveur en direct. Une autre option est d'écrire une fonction d'encapsulation pour ssh qui recherche dans ses arguments les noms d'hôtes en direct connus et définit l'arrière-plan en conséquence.

0 votes

Lien cassé, j'en ai peur :(

1voto

unexist Points 1647

Pourquoi ne pas simplement changer l'invite du shell lorsque vous êtes connecté via SSH ? Il existe généralement des variables shell spécifiques : SSH_CLIENT , SSH_CONNECTION , SSH_TTY

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X