Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2008, 14h44   #1
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
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.
OniChou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 15h22   #2
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 904
Points : 1 904
Bonjour

__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 15h27   #3
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
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.
OniChou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 16h40   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 13
Points : 14
Points : 14
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 .... ^^
tuxcoin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 17h04   #5
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 502
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 502
Points : 9 685
Points : 9 685
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.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 10h56   #6
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
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.
OniChou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 12h23   #7
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 904
Points : 1 904
Code :
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 ?
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 15h01   #8
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
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
OniChou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 15h22   #9
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 904
Points : 1 904
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>
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 16h47   #10
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
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 =)
OniChou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web