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 :

Savoir quel shell est utilisé par un script


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Savoir quel shell est utilisé par un script
    Bonjour,

    Je suis arrivé récemment sur un projet qui doit tourner sous AIX et Linux en KSH. Le problème, c'est que la solution utilisé pour différencier les 2, le test est fait sur une commande uname. Ceci marchait un temps, car les machines étaient bien ciblées. Ainsi, les linux étaient des mandrake, et n'avaient pas réélement de KSH : un lien ksh -> bash était créé pour faire illusion. Ainsi, en fonction de uname ("AIX" ou "Linux"), le shell savait (indirectement) s'il utilisait du bash ou du ksh.

    Le problème, c'est que maintenant, la boîte décide qu'il va y avoir aussi des Red Hat Enterprise 4, et cette distribution inclut un KSH... Donc le programme voit que c'est du Linux, et lance des commandes bash qui ne marchent pas toutes, puisque nous sommes en fait en KSH.

    L'idée, c'est de ne pas reconnaître la distribution, mais de savoir quel shell est réélement lancé. Il y avait bien la variable $SHELL qui semblait intéressante, mais elle garde le shell qui lance le script, et non celui utilisé dans le script.

    Avez vous une solution qui tienne la route et propre ? (= ne pas différencier chaque machine qui puisse arriver)

    Merci d'avance pour votre aide =)

    OniChou.

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ta réponse. Helas, cela ne m'aide pas, car les scripts contiennent un shabang, donc $0 renvoie le nom du script. De plus, même sans le shabang, ca ne changerait rien, puisque le problème provient des machines où ksh est un lien symbolique, donc $0 me renverrait ksh, alors que le véritable shell utilisé derrière sera bash.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour OniChou,

    ormis effectivement voir la variable $SHELL qui positionne ton interpreteur, je vois comme autre solution l'entete du shell utilisé .. du style #!/bin/... cela pourra tu donner l'interpreteur a utiliser ...
    Solution relativement simple je l'admets .... ^^

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    Est-ce que la variable d'environnement $SHELL serait correctement mise à jour par hasard ? Si tel est le cas, alors il suffit de tester sa valeur dans le script.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Donc d'après mes tests :
    - Utiliser le shabang (#!/bin/ksh) ne fonctionne pas, puisque je récupère ksh, même si ksh est en fait un lien vers bash.
    - Utiliser la variable $SHELL ne fonctionne pas non plus, puisqu'elle est positionnée au lancement du shell, et si la personne tourne sous un shell pdksh par exemple, la variable sera toujours celle-ci.

    Merci de votre aide.

    Pour info, j'avais un début de piste avec "ksh --version" qui me sort bien le véritable shell utilisé. Hélas, cette option n'est pas implementée dans pdksh (qui est le ksh sous notre Red Hat), donc inutilisable.

  7. #7
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /bin $ ls -Al *sh
    -rwxr-xr-x 1 root root 701680 2007-10-05 16:37 bash
    -rwxr-xr-x 1 root root  80308 2007-09-29 14:47 dash
    lrwxrwxrwx 1 root root      4 2008-02-14 13:57 rbash -> bash
    lrwxrwxrwx 1 root root      4 2006-11-15 14:56 sh -> dash
    /bin $ file rbash
    rbash: symbolic link to `bash'
    L'utilisation de file ne t'aiderait elle pas à savoir si le shell utilisé est en fait un lien symbolique ou pas ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Effectivement, j'y avais pensé, mais il faudra faire des tests multiples pour les machines utilisant "alternatives". En effet, sur une debian, ksh est un lien, mais vers /etc/alternatives/ksh, qui lui même est un lien vers /bin/ksh93 =/

    Pas pratique quand même ^^;

    Merci en tout cas, mais je ne peux pas utilisé cette méthode

  9. #9
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Tu pourrais faire une fonction qui suit récursivement les liens symboliques jusqu'à trouver un vrai fichier.

    Si tu envisages d'avoir un outil sur plusieurs distributions différents, tu auras nécessairement des traitement différents. </EnfonçageDePortesOuvertes>

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    C'est une idée... un peu violente, mais c'est une idée

    Mais bon, ca ne sert plus à rien de se prendre la tête, la décision a été prise au dessus de moi que, sous nos linux, tous les ksh seront sauvegardés, et deviendront des liens vers bash u_u Y'a vraiment des boîtes où ils se cassent pas la tête u_u

    En tout cas, merci pour votre aide et soutien dans mon problème =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Savoir si un fichier est utilisé par une application
    Par rambc dans le forum Général Python
    Réponses: 22
    Dernier message: 21/11/2010, 11h50
  2. Réponses: 8
    Dernier message: 18/08/2010, 19h55
  3. Savoir quel module est utilisé pour tel matériel
    Par Fluxy dans le forum Matériel
    Réponses: 4
    Dernier message: 06/10/2008, 09h51
  4. [C#]Savoir quel systeme est utilisè
    Par nephhh dans le forum C#
    Réponses: 2
    Dernier message: 04/07/2008, 14h58
  5. Réponses: 3
    Dernier message: 22/02/2006, 11h23

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