GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisez .bashrc sans casser sftp

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.


Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Pourquoi ne puis-je pas utiliser Cd dans un script Bash ? ?

  3. Utiliser l'extension .sh ou .bash pour les scripts bash ?

  4. Quel shell dois-je utiliser - Tcsh Vs Bash ??

  5. Utiliser SFTP et SCP

Comment utiliser la commande de lecture Bash

.bashrc contre .bash_profile

Comment utiliser la commande echo sans retour à la ligne

Qu'est-ce que Zsh ? Devriez-vous l'utiliser ?

Bash :ls * sans regroupement de dossiers

Restaurer ~/.bashrc sans utiliser les commandes bash