pipe connaître la commande appellante ?

Le
Une Bévue
soit la commande :

$ mon_bin mon_fichier | /path/to/mon_script

je voudrais pouvoir récupérer dans "mon_script" la commande précédente,
càd ce qu'il y a avant le pipe "|", ici "mon_bin mon_fichier".
Avec tous les arguments.

est-ce possible ?

si oui, comment ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #24615311
Bonjour,

le 04/07/2012 à 08:51, Une Bévue a écrit dans le message

soit la commande :

$ mon_bin mon_fichier | /path/to/mon_script

je voudrais pouvoir récupérer dans "mon_script" la commande
précédente, càd ce qu'il y a avant le pipe "|", ici "mon_bin
mon_fichier".
Avec tous les arguments.

est-ce possible ?



Non, pas dans l'état. « | » envoie la sortie standard de ce qui est
à gauche sur l'entrée de ce qui est à gauche. Par conséquent mon_script
n'a aucune idée de la commande précédente.

si oui, comment ?



Si tu peux modifier mon_script, il faut que ce soit lui qui exécute
« mon_bin mon_fichier », ta ligne de commande devient :
/path/to/mon_script mon_bin mon fichier

un truc du genre :
#!/bin/sh
CMD="$@"
echo "la commande est : $CMD"
$CMD | cat

./test.sh grep @ test.sh
la commande est : grep @ test.sh
CMD="$@"

Ensuite, tout dépend de ce que tu veux faire mais comme tu ne l'as pas
indiqué...

--
Benoit Izac
Luc.Habert.00__arjf
Le #24615301
Benoit Izac :

CMD="$@"
echo "la commande est : $CMD"
$CMD | cat



Mais non, quoi. "$@" | cat
Une Bévue
Le #24615361
Le 04/07/12 10:54, Luc Habert a écrit :
Benoit Izac :

>CMD="$@"
>echo "la commande est : $CMD"
>$CMD | cat


Mais non, quoi. "$@" | cat



euh, chez moi (shell zsh sur Mac OS X) il n'y a rien dans $@
Benoit Izac
Le #24615351
Bonjour,

le 04/07/2012 à 11:02, Une Bévue a écrit dans le message

>CMD="$@"
>echo "la commande est : $CMD"
>$CMD | cat


Mais non, quoi. "$@" | cat



euh, chez moi (shell zsh sur Mac OS X) il n'y a rien dans $@



J'en doute fort ($@ est POSIX) ; essaye :
% cat test.sh
#!/bin/sh
"$@" | cat
% zsh ./test.sh grep '@" |' ./test.sh
"$@" | cat

--
Benoit Izac
YBM
Le #24615571
Le 04.07.2012 08:51, Une Bévue a écrit :

soit la commande :

$ mon_bin mon_fichier | /path/to/mon_script

je voudrais pouvoir récupérer dans "mon_script" la commande précédente,
càd ce qu'il y a avant le pipe "|", ici "mon_bin mon_fichier".
Avec tous les arguments.

est-ce possible ?



oui et non, si la commande de gauche a terminée, c'est trop tard... et
pire,

si oui, comment ?



comme ça :

$ cat getleft
#!/bin/sh

LEFTPID=$(
find /proc/[0-9]*/fd -maxdepth 1 -name 1
-exec echo -n {} ' ' ;
-exec readlink {} ; 2> /dev/null |
grep -F $( readlink /proc/$$/fd/0 ) | cut -f1 -d' ' | cut -f3 -d/
)

echo $LEFTPID

ps u -p$LEFTPID 2> /dev/null

$ sleep 10 | ./getleft
16643
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tv 16643 0.0 0.0 2996 620 pts/0 S+ 13:55 0:00 sleep 10

$ ls | ./getleft

$ cat /vmlinuz | ./getleft
16843
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tv 16843 0.0 0.0 3000 600 pts/0 S+ 13:55 0:00 cat
/vmlinuz
YBM
Le #24615611
Le 04.07.2012 13:56, YBM a écrit :
$ cat getleft
#!/bin/sh

LEFTPID=$(
find /proc/[0-9]*/fd -maxdepth 1 -name 1
-exec echo -n {} ' ' ;
-exec readlink {} ; 2> /dev/null |



petit détail :
-exec readlink {} ; 2> /dev/null | grep -F pipe |

(pour être sûr que stdin est un tube)

sinon ça liste tous les processus dont le stdout est
notre stdin, et donc pas mal de choses si stdin est un
terminal et pas un tube.
Une Bévue
Le #24615631
Le 04/07/12 14:08, YBM a écrit :
| grep -F pipe |



OK, merci, mon grep ne doit pas être le même :
$ sleep 10 | ./getleft.sh
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

$ grep --version
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
moi-meme
Le #24615801
Le Wed, 04 Jul 2012 14:17:37 +0200, Une Bévue a écrit :

OK, merci, mon grep ne doit pas être le même



man grep
Une Bévue
Le #24615891
Le 04/07/12 16:56, moi-meme a écrit :
OK, merci, mon grep ne doit pas être le même


man grep



grep n'est pas le problème, sur Mac OS X, il n'y a pas de /proc.

je ne sais où trouver l'équivalent.
Fabien LE LEZ
Le #24615881
On Wed, 04 Jul 2012 17:38:12 +0200, Une Bévue

sur Mac OS X, il n'y a pas de /proc.



Ah ben oui, effectivement, MacOS X n'est pas un Linux, c'est un BSD.
Publicité
Poster une réponse
Anonyme