IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Exécuter une function via un script avec URxvt


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Exécuter une function via un script avec URxvt
    Bonjour,

    Je dispose d'une fonction "coucou" dans "$HOME/.config/test/script1".

    Via URxvt, je tape la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~ $ . ~/.config/test/script1
    ~ $ coucou
    coucou
    La fonction s'exécute correctement.

    Cependant, si j'utilise un autre script dans "$HOME/.config/test/script2" pour appeler cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/sh
    case "choix" in
        test1)
                urxvt -hold -g "85x24" -e sh $HOME/.config/test/script1 coucou
                ;;
    esac
    La console s'ouvre mais vide.

    Une petite idée, s'il vous plaît?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Déjà il faut arrêter de faire croire que c'est sh si c'est bash.
    Ensuite, pour l'un comme l'autre, on utilise l'option "-c".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urxvt -hold -g "85x24" -e bash -c "$HOME/.config/test/script1 coucou"
    (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ bash echo coco
    /bin/echo: /bin/echo : ne peut exécuter le fichier binaire
    $ which echo
    /bin/echo
    $ bash -c "echo coco"
    coco

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Olivier Regnier Voir le message
    Bonjour,

    Je dispose d'une fonction "coucou" dans "$HOME/.config/test/script1".

    Via URxvt, je tape la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~ $ . ~/.config/test/script1
    ~ $ coucou
    coucou
    La fonction s'exécute correctement.
    Lorsque tu tapes . ~/.config/test/script1, j'imagine que tu le fais dans un terminal qui exécute un shell (dont le PID est le résultat de echo $$). La conséquence est que les instructions de ton script script1 impactent ce shell. Ainsi la définition d'une fonction (ou l'affectation d'une variable) va se retrouver intégrée au shell courant, si bien qu'il pourra par la suite appeler cette fonction (ou utiliser la valeur de la variable).

    Cependant, si j'utilise un autre script dans "$HOME/.config/test/script2" pour appeler cette fonction:
    La console s'ouvre mais vide.
    Lorsque tu lances un nouveau shell (comme script2, mais ce pourrait aussi être simplement un shell interactif comme sh ou bash), l'environnement de ce nouveau shell est une copie de la partie exportée du shell appelant (celui dont tu as affiché le PID précédemment).
    Or, la partie exportée d'un shell comporte les variables exportées, mais pas les variables non exportées, ni les alias, ni les fonctions, ce qui explique que la fonction coucou soit inconnue dans script2.

    Si tu veux vraiment utiliser la fonction coucou dans le script script2, alors il faut importer sa définition, c'est-à-dire insérer . ~/.config/test/script1 dans le code de script2 avant son utilisation.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Décembre 2013
    Messages : 70
    Par défaut
    Salut,
    Citation Envoyé par Olivier Regnier Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~ $ . ~/.config/test/script1
    ~ $ coucou
    coucou
    La fonction s'exécute correctement.
    Lorsque tu fais cela, tu sources script1 et ensuite, tu appelles la fonction coucou.

    Citation Envoyé par Olivier Regnier Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/sh
    case "choix" in
        test1)
                urxvt -hold -g "85x24" -e sh $HOME/.config/test/script1 coucou
                ;;
    esac
    Là, tu appelles script1 avec en argument coucou. Ce n'est pas la même chose.

    Je ne peux pas tester à l'instant mais ça serait pas plutôt ça qu'il faut faire du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urxvt -hold -g "85x24" -e "sh -c '. $HOME/.config/test/script1; coucou'"
    Ou peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urxvt -hold -g "85x24" -e ". $HOME/.config/test/script1; coucou"
    ??

  5. #5
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Je vais tester et je vous tiens informé.

Discussions similaires

  1. Passer une variable dans une image via un script
    Par Lomig dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2006, 17h10
  2. Simuler une identification via un script
    Par Comawhite dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2006, 14h26
  3. Ouverture d'une image via un script PHP
    Par passie dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 24/01/2006, 17h10
  4. Exporter une variable via un script sous KSH
    Par Snivel dans le forum Linux
    Réponses: 4
    Dernier message: 09/12/2005, 16h44
  5. Ajout de champs à une table via un script ?
    Par mathias dans le forum Access
    Réponses: 1
    Dernier message: 05/12/2005, 23h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo