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 :

[bash] Simulation de [tab] complétion en commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut [bash] Simulation de [tab] complétion en commande
    Bonjour ,

    J'essaye de completer une commande , par commande .
    Exemple : Completer un simple echo par commande .

    J'ai essayé ceci :

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    Bonjour,

    quel est le contexte ?
    tu peux donner plus de détails sur ce que tu veux faire ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    J'écris un(e) script/commande qui va tuer un processus après completion de son nom.
    Donc , il faudrait une commande qui permet de simuler le [tab] en bash , aprés le préfix du processus .

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,

    En bash (built-in) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ compgen -c prin
    printf
    print
    printafm
    printenv
    printf
    printerbanner
    Cordialement.

  5. #5
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Ça fonctionne pas pour completer le nom d'un processus avec killall .

  6. #6
    Membre habitué Avatar de RaphaelG
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2016
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 94
    Points : 183
    Points
    183
    Par défaut
    Bin si, chez moi ça fonctionne. Je connaissais pas alors j'ai essayé.
    Je lance 2 process xpat2 et je les tue avec la commande "killall `compgen -c xpat`".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ~$ ps -ef | grep xpat2
    raph      7676     1  0 01:33 ?        00:00:00 /usr/games/xpat2
    raph      7683     1  0 01:33 ?        00:00:00 /usr/games/xpat2
    raph      7696  7168  0 01:33 pts/0    00:00:00 grep xpat2
    ~$ killall `compgen -c xpat`
    ~$ echo $?
    0
    ~$ ps -ef | grep xpat2
    raph      7715  7168  0 01:34 pts/0    00:00:00 grep xpat2
    ~$ killall `compgen -c xpat`
    xpat2: no process found
    ~$ echo $?
    1
    ~$
    Mais je trouve ça dangereux.
    IMHO, you should RTFM ASAP. IHTH.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Pourrais-tu être plus explicite sur ton besoin ?
    Tu voudrais que derrière la commande killall on puisse appuyer sur [TAB] pour que cela complète une liste possible de commande en cours ?

    Si c'est le cas, les configurations existe déjà sous ubuntu par exemple...

    Voici ce que donne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ complete -p | grep killall
    complete -F _killall killall
    Ici, _killall est une fonction et pour voir sa définition, il suffit d'utiliser la commande type _killall.
    Cordialement.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Citation Envoyé par RaphaelG Voir le message
    Bin si, chez moi ça fonctionne. Je connaissais pas alors j'ai essayé.
    Je lance 2 process xpat2 et je les tue avec la commande "killall `compgen -c xpat`".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ~$ ps -ef | grep xpat2
    raph      7676     1  0 01:33 ?        00:00:00 /usr/games/xpat2
    raph      7683     1  0 01:33 ?        00:00:00 /usr/games/xpat2
    raph      7696  7168  0 01:33 pts/0    00:00:00 grep xpat2
    ~$ killall `compgen -c xpat`
    ~$ echo $?
    0
    ~$ ps -ef | grep xpat2
    raph      7715  7168  0 01:34 pts/0    00:00:00 grep xpat2
    ~$ killall `compgen -c xpat`
    xpat2: no process found
    ~$ echo $?
    1
    ~$
    Mais je trouve ça dangereux.
    Ici, vaut mieux faire quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    killall `compgen -X '<default>' -W "$(ps -eo comm | sort -u)" xpat`
    Dans ce cas, on ne filtre que les process en cours, et non pas toutes les commandes possibles, mais je suis de ton avis, c'est une façon de faire dangereuse.
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    et, pkill xpat ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre habitué Avatar de RaphaelG
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2016
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 94
    Points : 183
    Points
    183
    Par défaut
    +1 pour pkill.
    La commande est plus courte à taper mais en plus c'est plus universel.
    compgen, c'est un bashisme qui n'existe pas si on utilise un autre shell.
    Par exemple sous Debian, /bin/sh est un lien symbolique vers le Debian Almquist shell que j'aime bien utiliser à l'intérieur de mes shell-scrips. Ca me rappelle ma jeunesse où il fallait écrire en Bourne shell et pis c'est tout.
    Et là, sous dash, compgen n'existe pas.

    Je vous rassure; dans mes sessions interactives, j'utilise bash : complétion, historique, toussa...
    IMHO, you should RTFM ASAP. IHTH.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    Citation Envoyé par codezero1
    Cette commande est censé
    quelle commande ?
    tu veux dire qu'elle a du sens, ou qu'elle devrait... ?

    non, tu ne fais quand même pas kill $(pgrep <command>), n'est-ce pas ?!
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Pour l'instant j'utilise pgrep.
    ----------
    La commande suivante est censée afficher la xsession active.
    ( il y a d'autres approches mais pas pour toute xsession )

    La boucle voulue c'est: "tant que la fin de fichier n'est pas rencontrée , affiche la session active par pgrep."
    Pourtant, ça boucle infiniment et affiche des processus qui n'ont rien a voir avec le contenu du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls /usr/share/xsessions/>all_xsessions;while [ "$var" != "EOF" ]; do let x=x+1; var=$(sed "${x}q;d" all_xsessions); pgrep -lu $(whoami) $var; done

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    En fait, je ne comprends même plus le sujet, on passe d'un problème initial sur la complétion à la mode readline à un problème de "kill"...

    Que veux-tu faire au juste ?
    Cordialement.

  14. #14
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    quelle commande ?
    tu veux dire qu'elle a du sens, ou qu'elle devrait... ?

    non, tu ne fais quand même pas kill $(pgrep <command>), n'est-ce pas ?!
    Edit:Oups, je pensais pas avoir posté, un problème de chargement de la page.

Discussions similaires

  1. [bash] Substituer le résultat d'une commande dans une variable en texte
    Par Erculpoiro dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 14/05/2013, 12h24
  2. [bash] opérateurs conditionnels et regroupement de commandes.
    Par ben.IT dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 18/03/2011, 00h15
  3. [Putty] Auto-complétion et commande stty
    Par NorocBzh dans le forum Linux
    Réponses: 5
    Dernier message: 02/06/2010, 12h40
  4. Réponses: 3
    Dernier message: 20/09/2005, 19h27
  5. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 17h22

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