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 :

[Dialog] Génération des choix d’une radiolist


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club Avatar de Fork Bomb
    Homme Profil pro
    En recherche d’un premier emploi « Technicien Système et Réseau »
    Inscrit en
    Décembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : En recherche d’un premier emploi « Technicien Système et Réseau »

    Informations forums :
    Inscription : Décembre 2012
    Messages : 29
    Points : 42
    Points
    42
    Par défaut [Dialog] Génération des choix d’une radiolist
    Bonjour,
    Je suis en ce moment en train de réécrire certains de mes utilitaires.
    Le problème sur lequel je bute est la génération à l’aide d’une boucle "for" des choix d’une liste de boutons radio en dialog.
    Pour bien vous faire comprendre, testez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for Utilisateur in $(grep /home /etc/passwd|awk -F':' '{print $1}'); do echo "${Utilisateur}"; done
    Normalement, la liste des utilisateurs de votre système doit apparaître.
    Maintenant, si je formate l’affichage pour le préparer à l’inclusion dans la radiolist de dialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for Utilisateur in $(grep /home /etc/passwd|awk -F':' '{print $1}'); do echo "${Utilisateur}" "Effacement de : ${Utilisateur}" "off"; done
    Enfin, si je tente de mettre le tout dans un dialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DeleteAccount=`dialog --stdout --backtitle "${BACK_TITLE}" \
    		--title "Effacement d’un utilisateur" \
    		--radiolist "Compte à effacer :" 18 65 10 \
    		\`for Utilisateur in $(grep /home /etc/passwd|awk -F':' '{print $1}'); do echo "${Utilisateur}" "Effacement de : ${Utilisateur}" "off"; done\``
    Ben là, y a pas moyen. Pour 2 utilisateurs enregistrés, j’ai 4 lignes.
    La raison m’échappe mais s’il est généré (enfin, de la manière dont je le fait…), le second champ d’un radiolist ne supporte pas de contenir des espaces.
    -----
    Donc, je m’en remets à vous si vous avez des idées, n’hésitez pas.
    Merci.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Déjà, est-ce que c'est pas moins casse-bonbon de faire ceci pour avoir les utilisateurs?
    Ensuite tu as un problème d'espace. Ne peux-tu pas faire ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeleteAccount=$( dialog --stdout --radiolist Comptes 18 65 10 $(for Utilisateur in $(id -u -n); do echo -n $Utilisateur "Effacement:$Utilisateur" off ; done ) )
    ou cela?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeleteAccount=$( dialog --stdout --radiolist Comptes 18 65 10 $(for Utilisateur in $(id -u -n); do echo -n $Utilisateur "Effacement" off ; done ) )
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club Avatar de Fork Bomb
    Homme Profil pro
    En recherche d’un premier emploi « Technicien Système et Réseau »
    Inscrit en
    Décembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : En recherche d’un premier emploi « Technicien Système et Réseau »

    Informations forums :
    Inscription : Décembre 2012
    Messages : 29
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Déjà, est-ce que c'est pas moins casse-bonbon de faire ceci pour avoir les utilisateurs?
    Sur ma machine, cette commande ne fait que renvoyer le nom de l’utilisateur qui l’a lancé. L’idée de ma commande de filtrage est bien de récupérer tous les utilisateurs enregistrés sur la machine.
    Citation Envoyé par Flodelarab Voir le message
    Ensuite tu as un problème d'espace. Ne peux-tu pas faire ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeleteAccount=$( dialog --stdout --radiolist Comptes 18 65 10 $(for Utilisateur in $(id -u -n); do echo -n $Utilisateur "Effacement:$Utilisateur" off ; done ) )
    ou cela?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeleteAccount=$( dialog --stdout --radiolist Comptes 18 65 10 $(for Utilisateur in $(id -u -n); do echo -n $Utilisateur "Effacement" off ; done ) )
    J’ai bien compris que, généré, le second champ ne supportait pas les espaces (écrit en dur, ça passe). Mais je ne souhaite pas utiliser un contournement. Je souhaite trouver une solution à mon problème.

  4. #4
    Membre du Club Avatar de Fork Bomb
    Homme Profil pro
    En recherche d’un premier emploi « Technicien Système et Réseau »
    Inscrit en
    Décembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : En recherche d’un premier emploi « Technicien Système et Réseau »

    Informations forums :
    Inscription : Décembre 2012
    Messages : 29
    Points : 42
    Points
    42
    Par défaut
    Bon ben… Résolu.
    Voilà ce qui marche chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		# Noms des comptes sur le système
    		SystemAccounts=`for Utilisateur in $(grep /home /etc/passwd|awk -F':' '{print $1}'); do echo "$Utilisateur" \"Effacement de : $Utilisateur\" off; done`
    		# On récupère le nom du compte effacé
    		DeleteAccount=`echo $SystemAccounts|xargs dialog --stdout --backtitle "${BACK_TITLE}" --title "Effacement d’un utilisateur" --radiolist "Compte à effacer :" 18 65 10`
    Vous pouvez tester, ça marche
    Merci à Flodelarab de s’être penché sur mon problème.
    [Source]

  5. #5
    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 pour info, les backquotes (ou backticks) sont moins recommandés que le '$(' qui gère beaucoup mieux les imbrications (de divers guillemets et autres '$(').

  6. #6
    Membre du Club Avatar de Fork Bomb
    Homme Profil pro
    En recherche d’un premier emploi « Technicien Système et Réseau »
    Inscrit en
    Décembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : En recherche d’un premier emploi « Technicien Système et Réseau »

    Informations forums :
    Inscription : Décembre 2012
    Messages : 29
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Juste pour info, les backquotes (ou backticks) sont moins recommandés que le '$(' qui gère beaucoup mieux les imbrications (de divers guillemets et autres '$(').
    On m’a dit que "`commande`" était plus portable que "$(commande)". Du coup, je l’utilise en priorité.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Citation Envoyé par Fork Bomb
    On m’a dit que "`commande`" était plus portable[...]
    c'est faux.
    pour savoir ce qui est portable, il faut lire les spécifications POSIX.

    et on n'utilise par une boucle for sur la sortie d'une commande, car elle boucle sur chaque mot, et non sur chaque ligne.
    ça ne porte pas à conséquence ici, c'est une bonne pratique à adopter au plus tôt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SystemAccounts=$(awk -F':' '/\/home/{print $1" \"Effacement de : "$1"\" off"}' /etc/passwd)
    ...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre du Club Avatar de Fork Bomb
    Homme Profil pro
    En recherche d’un premier emploi « Technicien Système et Réseau »
    Inscrit en
    Décembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : En recherche d’un premier emploi « Technicien Système et Réseau »

    Informations forums :
    Inscription : Décembre 2012
    Messages : 29
    Points : 42
    Points
    42
    Par défaut
    Wow, ta commande est bien plus concise que la mienne o_0;;;
    Visiblement, je ne connais PAS*DU*TOUT awk… :/
    Merci encore

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 290
    Points : 12 759
    Points
    12 759
    Par défaut
    Bonjour,

    Pour le fun, une version juste avec grep (de GNU) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -o -P '^[^:]*(?=.*/home)' /etc/passwd | xargs -IUSER echo 'USER "Effacement de : USER" off'
    Cordialement.

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

Discussions similaires

  1. [Info] génération des méthodes parentes
    Par Popeye75 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/12/2005, 17h24
  2. Réponses: 6
    Dernier message: 19/10/2005, 12h10
  3. Variable qui évolue en fonction des choix dans formulaire
    Par stefou007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2005, 22h40
  4. [JAXB][XSD] Problème lors de la génération des classes
    Par charlot44 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/06/2005, 16h10

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