Comment puis-je savoir (en ~/.bashrc
) si je fonctionne en mode interactif ou, par exemple, si j'exécute une commande via ssh. Je veux éviter l'impression des séquences d'échappement ANSI dans les messages suivants .bashrc
si c'est le dernier.
Réponses
Trop de publicités?Selon man bash
:
PS1 est défini et $- inclut i si bash est interactif, ce qui permet à un Shell Shell ou un fichier de démarrage de tester cet état.
Donc vous pouvez utiliser :
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
Aussi :
Lorsqu'un Shell interactif qui n'est pas un Shell de connexion est lancé, bash lit et exécute les commandes à partir de /etc/bash.bashrc et ~/.bashrc, si ces fichiers existent.
Así que ~/.bashrc
n'a de source que pour les shells interactifs. Parfois, les gens l'utilisent à partir de ~/.bash_profile
o ~/.profile
ce qui est incorrect car cela interfère avec le comportement attendu. Si vous voulez simplifier la maintenance du code qui est commun, vous devriez utiliser un fichier séparé pour contenir le code commun et le sourcer indépendamment des deux fichiers rc.
C'est mieux s'il n'y a pas de sortie sur stdout à partir de la connexion. rc
des fichiers tels que ~/.bash_profile
o ~/.profile
car il peut interférer avec le bon fonctionnement de rsync
par exemple.
Quoi qu'il en soit, il est toujours bon de tester l'interactivité, car une configuration incorrecte peut exister.
C'est comme ça que Red Hat le fait... Je suppose que c'est le moyen le plus rapide...
if [ "${-#*i}" == "$-" ]; then
Cela signifie que l'on récupère les paramètres bash, que l'on supprime une sous-chaîne, la plus courte possible, en faisant correspondre tout ce qui se trouve entre le début et i. Ensuite, on vérifie si c'est la même chose que les paramètres bash originaux.
Vérifiez que vous avez fait votre travail en vous connectant à l'utilisateur à l'aide de sftp, il échouera si des sessions non interactives ont une sortie.