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 POSIX Discussion :

Shell : comment savoir lequel est utilise


Sujet :

Shell et commandes POSIX

  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut Shell : comment savoir lequel est utilise
    Bonjour,

    Je me demandais comment savoir quel shell est utilise, sachant que $SHELL contient le shell par defaut de l'utilisateur, et non pas le shell courrant.

    De meme, /etc/passwd ne contient pas le shell courant, mais le shell qui sera lance lors du login de l'utilisateur. Il suffit d'en appeler un autre dans le .profile ou equivalent pour changer.

    La seule commande que j'ai trouvee pour le moment ne fonctionne que sous Linux :
    mais elle n'est pas portable, car suppose que l'OS utilise cela, ce qui ne sera pas le cas des unix, comme FreeBSD par exemple.

    Merci
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    A priori, le shell en cours est un simple process lancé donc pas de traces dans un fichier de conf ou dans une variable d'environnement comme c'est la cas pour le shell par défaut de l'utilisateur.

    Donc la seule solution que je vois c'est de regarder les process qui tournent, après ça nous confronte à plusieurs problèmes :
    - on ne peut que vérifier si tel shell est lancé et non pas demander quel shell est lancé
    - si plusieurs sessions sont démarrées avec différents shell, ça ne nous aidera pas beaucoup à moins de te servir de l'UID.

    Donc à partir d'une liste de shell, des commandes ps -ef et grep ainsi que l'UID ou le nom de l'utilisateur (ça doit dépendre de l'OS), on peut retrouver le shell courant. Tu peux éventuellement faire un script pour ça

    Si tu veux aller plus loin afin de traiter le cas ou l'utilisateur lance plusieurs shells différents, tu pourra peut être retrouver le PID dont le PPID est celui de ta console ou un truc du genre ... c'est un peu ce que tu fait avec ta commande mais faudrait le faire de manière portable avec la commande ps par exemple.

    Cordialement,
    Idriss

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    A priori, ceci devrait afficher le shell courant sur tous les Unix/Linux/BSD etc. standards.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -o comm -p $$ | tail -1
    ɹǝsn *sıɹɐlos*

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Merci a vous deux. Je teste dans la journee et reviens vers vous si ca ne fonctionne pas
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Merci à jlliagre surtout, je n'imaginais pas qu'on puisse faire aussi simple

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    il y'a aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    readlink "/proc/$$/exe"
    plein d'informations ici.

    http://www.kernel.org/doc/man-pages/...n5/proc.5.html
    /proc/[pid]/exe
    Under Linux 2.2 and later, this file is a symbolic link containing the
    actual pathname of the executed command. This symbolic link can be
    dereferenced normally; attempting to open it will open the executable.
    You can even type /proc/[pid]/exe to run another copy of the same
    executable as is being run by process [pid]. In a multithreaded
    process, the contents of this symbolic link are not available if the
    main thread has already terminated (typically by calling
    pthread_exit(3)).

    Under Linux 2.0 and earlier /proc/[pid]/exe is a pointer to the binary
    which was executed, and appears as a symbolic link. A readlink(2) call
    on this file under Linux 2.0 returns a string in the format:

    [device]:inode

    For example, [0301]:1502 would be inode 1502 on device major 03 (IDE,
    MFM, etc. drives) minor 01 (first partition on the first drive).

    find(1) with the -inum option can be used to locate the file.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Malheureusement, readlink n'est pas present sur certaines plateformes, et en plus /proc/$$/exe n'a pas l'air present sur les Unix (en tout cas, il n'apparait ni sur AIX, ni sur Solaris).

    La commande de jiliagre reste la meilleure pour le moment (meme si elle n'est pas executable depuis un programme, mais ca c'est encore une autre histoire).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Malheureusement, readlink n'est pas present sur certaines plateformes, et en plus /proc/$$/exe n'a pas l'air present sur les Unix (en tout cas, il n'apparait ni sur AIX, ni sur Solaris).

    La commande de jiliagre reste la meilleure pour le moment (meme si elle n'est pas executable depuis un programme, mais ca c'est encore une autre histoire).
    oui cette commande est assez specifique à linux
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    meme si elle n'est pas executable depuis un programme, mais ca c'est encore une autre histoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -o comm -p $(ps -o ppid -p $$|tail -1) | tail -1
    ɹǝsn *sıɹɐlos*

  10. #10
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Par erreur, j'ai tape "echo $0" dans un terminal, et celui-ci m'a repondu.... Le nom du shell utilise !

    J'ai essaye sur linux RedHat, AIX et Solaris, avec sh, ksh, zsh et bash, et le resultat est systematiquement le nom du shell courant.

    Bien sur, cela ne fonctionnera pas dans un programme appelant, mais bon, si j'ai du temps, c'est peut-etre une piste que je creuserai.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Alors là chapeau ! Trouver une solution par hasard à ce point

    Ça marche bien chez moi, je note.

  12. #12
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Alors là chapeau ! Trouver une solution par hasard à ce point
    Je voulais taper "echo $?" pour savoir si mon make avait plante ou non...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  13. #13
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    echo $0 affiche le nom du shell uniquement en mode interactif. Si tu es dans un script, je t'ai proposé deux solutions, l'une affichant le shell exécutant le script et l'autre le shell ayant lancé le script. Est-ce que c'est suffisant ou tu as des cas où ça n'affiche pas ce que tu attends ?
    ɹǝsn *sıɹɐlos*

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    echo $0 affiche le nom du shell uniquement en mode interactif. Si tu es dans un script, je t'ai proposé deux solutions, l'une affichant le shell exécutant le script et l'autre le shell ayant lancé le script. Est-ce que c'est suffisant ou tu as des cas où ça n'affiche pas ce que tu attends ?
    C'est largement suffisant, et je t'en remercie. Je mettais juste ma remarque sur echo $0 car je trouvais drole de tomber dessus par hasard
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  15. #15
    Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    A priori, ceci devrait afficher le shell courant sur tous les Unix/Linux/BSD etc. standards.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -o comm -p $$ | tail -1
    Petite précision: Cette (excellente) commande fonctionne en ligne de commande. Cependant, dans un script, $$ retournera le PID du script et plus celui du shell, qui est devenu parent du script, donc, dans un script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -o comm -p $PPID | tail -1
    et si on veut sauver dans une variable en vue d'analyse ultérieure, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MY_CURRENT_SHELL="$(ps -o comm -p $PPID | tail -1)"

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Juste à titre indicatif, sous mac os x (est-ce posix?):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ readlink "/proc/$$/exe"
    $ cat /proc/$$/cmdline
    cat: /proc/1170/cmdline: No such file or directory
     
    $ ps -o comm -p $(ps -o ppid -p $$|tail -1) | tail -1
    login
     
    $ ps -o comm -p $$ | tail -1
    -bash
     
    $ echo $0
    -bash

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2006, 10h55
  2. Comment savoir quel programme utilise toute la RAM ?
    Par Gloup dans le forum Administration système
    Réponses: 4
    Dernier message: 26/05/2006, 18h22
  3. comment savoir qui est connecté sur les db
    Par zoltix dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/05/2006, 16h35
  4. VARCHAR & CHAR - comment savoir lequel choisir !?
    Par Thierry8 dans le forum Requêtes
    Réponses: 15
    Dernier message: 18/12/2005, 20h54
  5. [linux] socket comment savoir si est un client est d
    Par Mascos dans le forum Réseau
    Réponses: 14
    Dernier message: 04/08/2004, 12h05

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