Bonjour ,
J'essaye de completer une commande , par commande .
Exemple : Completer un simple echo par commande .
J'ai essayé ceci :
Code:complete -c ech
Version imprimable
Bonjour ,
J'essaye de completer une commande , par commande .
Exemple : Completer un simple echo par commande .
J'ai essayé ceci :
Code:complete -c ech
Bonjour,
quel est le contexte ?
tu peux donner plus de détails sur ce que tu veux faire ?
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 .
Bonjour,
En bash (built-in) :
Code:
1
2
3
4
5
6
7 $ compgen -c prin printf print printafm printenv printf printerbanner
Ça fonctionne pas pour completer le nom d'un processus avec killall .
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`".
Mais je trouve ça dangereux.Code:
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 ~$
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:
Ici, _killall est une fonction et pour voir sa définition, il suffit d'utiliser la commande type _killall.Code:
1
2 $ complete -p | grep killall complete -F _killall killall
Ici, vaut mieux faire quelque chose du genre:
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.Code:killall `compgen -X '<default>' -W "$(ps -eo comm | sort -u)" xpat`
et, pkill xpat ?
+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...
quelle commande ?Citation:
Envoyé par codezero1
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 ?!
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: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
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 ?