Forum Programmation.shell scp lit .bashrc...?

Posté par  .
Étiquettes : aucune
0
28
déc.
2005
j'ai ecri un petit script, pour exporter la variable DISPLAY
à chaque ssh:


#Declare automatique DISPLAY
CONS=$(tty | sed "s~/dev/~~g")
ATIP=$(who | grep $CONS | awk '{print $6}' | sed "s~(~~g" | sed "s~)~~g" | sed "s~::ffff:~~g" )
echo "DISPLAY=$ATIP:0"
export DISPLAY=$ATIP:0
unset CONS
unset ATIP

Je l'ai mise sur la machine distante, un solaris.

Quand, depuis ma machine locale je fais:

scp kowalsky@192.168.0.124:/etc/hosts /etc/hosts

j'ai un retour du type:

grep: can't open protocol error: bad mode
You have mail in /var/mail/root
[kowalsky@~/test]# a
grep: can't open tty

Et quand j'enleve .bashrc, je n'ai aucun probleme, j'en conclu
que scp lit .bashrc.

J'ai trouvé un autre moyen d'exporter la variable DISPLAY, grace
à la variable TERM, mais comment resoudre ce probleme sans tricher
avec la variable TERM...?
  • # re

    Posté par  . Évalué à 4.

    non par défaut et si je ne dis pas de bêtise ssh ne lit pas .bashrc mais .bash_profile.

    Dan ton .bash_profile met :

    # include .bashrc if it exists
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
  • # utilise un if

    Posté par  . Évalué à 1.

    ... pour ne définir DISPLAY que pour les shells disposant d'un tty :


    if tty -s
    then

    #Declare automatique DISPLAY

    CONS=$(tty | sed "s~/dev/~~g")

    ATIP=$(who | grep $CONS | awk '{print $6}' | sed "s~(~~g" | sed "s~)~~g" | sed "s~::ffff:~~g" )

    echo "DISPLAY=$ATIP:0"

    export DISPLAY=$ATIP:0

    unset CONS

    unset ATIP

    fi
  • # Le problème...

    Posté par  . Évalué à 3.

    Le problème, à mon avis, c'est
    echo "DISPLAY=$ATIP:0"
    scp attend sur la sortie standard les infos de la commande scp distante, et il n'aime pas quand il y a un affichage imprévu...
    J'ai eu le problème moi-même sur une machine qui avait un mot du jour (/etc/motd)...

    Le if de Bastien Mourgues doit t'éviter cet affichage dans la foulée.
    Sinon, on peut aussi tester sur le prompt, qui n'est normalement pas défini dans le cas d'un shell non interactif (c'est-à-dire sauf si tu l'as fait toi-même sans faire le test avant dans ton .bashrc ou autre).
    [ -n "$PS1" ] && echo ...

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # au début de .bash_profile

    Posté par  . Évalué à 1.

    # Test for an interactive shell. There is no need to set anything
    # past this point for scp and rcp, and it's important to refrain from
    # outputting anything in those cases.
    if [[ $- != *i* ]]; then
    # Shell is non-interactive. Be done now
    return
    fi
  • # Merci a tous...!

    Posté par  . Évalué à 2.

    Merci de vos reponse toute complementaire...!

    la soluce de bastien marche pour l'instant, je vais tester plus en profondeur...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.