Solution 1 :
Essayez de faire ceci à la place
if [ "$SSH_TTY" ]
then
source .bashc_real
fi
Solution 2 :
La réponse de Mike fonctionnera probablement. Mais il convient de souligner que vous pouvez accomplir cette tâche en sélectionnant soigneusement les fichiers de démarrage dans lesquels placer les éléments détaillés. À partir de la page de manuel bash :
Lorsque bash est appelé en tant que shell de connexion interactif ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, et lit et exécute les commandes à partir du premier qui existe et est lisible. L'option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.
Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute des commandes à partir de ~/.bashrc, si ce fichier existe. Ceci peut être inhibé en utilisant l'option --norc. L'option de fichier --rcfile forcera bash à lire et à exécuter des commandes à partir du fichier au lieu de ~/.bashrc.
Les outils sftp/scp démarrent un shell interactif sans connexion, donc .bashrc sera sourcé. De nombreuses distributions utilisent .bashrc à partir de .bash_profile ou vice versa, ce qui peut prêter à confusion. Une bonne astuce pour tester la propreté de votre environnement de connexion consiste à vous connecter en ssh avec une commande, qui simule de la même manière la connexion scp/sftp. Par exemple :ssh myhost /bin/true
vous montrera exactement ce que scp/sftp voit lorsqu'ils se connectent.
Une démo simple :
[email protected]:~$ echo "echo Hello from .profile" > .profile
[email protected]:~$ echo "echo Hello from .bashrc" > .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$
[email protected]:~$ rm .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$
Le premier test provoquera la rupture de scp/sftp/rsync etc. La deuxième version fonctionnera très bien.
Solution 3 :
Si vous utilisez csh :
if ($?prompt)
... interactive stuff ...
Et si c'est bash :
if [[ $- == *i* ]]; then
... interactive stuff ...
fi
ou bien en utilisant des expressions régulières bash :
if [[ $- =~ i ]]; then
... interactive stuff ...
fi
Ces lignes doivent précéder les lignes où vous affichez/faites écho à quelque chose.