Récuperer toutes les execution d'une commande

Fermé
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - Modifié par xunil2003 le 28/06/2012 à 16:29
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 juin 2012 à 20:23
Bonjour,

Je voudrai savoir si il y a le moyen de récuperer toutes les commandes d'un programme en cours executer qu'il execute.
le programme est situé dans /usr/bin/cm15

exemple
serveur@debian:~$ cm15  
06/28 16:04:57   CM15aDemo version 1.78 - built Apr  7 2012 21:13:36   
06/28 16:04:57 X Have Access to CM15A for X10   
06/28 16:04:57 X X10 Devices Loaded       

Available Keyboard Commands:  
  l - List Devices and Status  
  q - quit  
  x - CM15A X10 interface Commands  

x  
Enter X10 command: HD Fun [percent for dim-bri] (eg A1 on)  
06/28 16:05:06 X RF:  E-2  On             
06/28 16:05:07 X RF:  E-2  On             
06/28 16:05:07 X PLC-R: E-2  On         ?  
06/28 16:05:09 X PLC-R: E-2  On         ?  
06/28 16:05:12 X RF:  E-2  Off            
06/28 16:05:12 X RF:  E-2  Off            
06/28 16:05:13 X PLC-R: E-2  Off        ?  
06/28 16:05:14 X PLC-R: E-2  Off        ?  
q  
serveur@debian:~$ 


je voudrai que lorsque le programme cm15 reception un ordre par exemple "E-2 On" celui-ci puis être écrit dans un fichier log nommé rapport-ordre-domotique-rf.log

La question est bête mais et il possible de récuperer les ordres via une variable qui l'exporterai dans un fichier log ou y a t'il un autre moyen ?

J'ai pensé a faire ceci
cm15 >> test-reception-rf.txt
mais comment expédié une variable pour chaque commande via ce script bash

#!/bin/bash  
echo ""  
echo "CM15A X10 interface Commands"  
cm15 >> test-reception-rf.txt  

case $cm15 in  

#D-1  On) execute=d1-on ;;  
#D-1  Off) execute=d1-off ;;  
#E-1  On) execute=e1-on ;;  
#E-1  Off) execute=e1-off ;;  
E-2) execute=e2-on ;;  
\ E-2\ On) execute=e2-on ;;  
E-2\ On) execute=e2-on ;;  
E-2\ Off) execute=e2-off ;;   
esac  

$execute


auriez vous une idée ?

Merci.



A voir également:

1 réponse

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
28 juin 2012 à 20:23
Personnellement je n'ai rien compris car les phrases sont assez incompréhensible ou les termes ambigu. Merci de soigner l'orthographe et d'être plus clair.

De manière générale un processus sous linux peut être vu comme une entité avec
- d'une entrée sur laquelle on lit de l'information (par défaut l'entrée standard /dev/stdin, par exemple pour une saisie clavier)
- d'une sortie (par défaut la sortie standard /dev/stdout pour écrire du texte dans la console, ou la propager vers un autre programme au travers d'un pipe)
- d'une porte de sortie pour les erreurs (par défaut la sortie d'erreur standard /dev/stderr)

En shell, les opérateurs de redirections servent à modifier la provenance (dans le cas de l'entrée) ou la destination (dans le cas des sorties) de ces trois flux d'information. Parmi eux on trouve :
- entrée : <
- sortie : >, >> (notés également 1> et 1>>), |
- sortie d'erreur : 2>, 2>>

Si tu ne connais pas ces opérateurs, je t'invite à lire un cours de shell, en particulier le pipe (|) car c'est celui dont tu as besoin (il est a priori inutile de stocker les sorties de cm15 dans un fichier intermédiaire, donc un pipe est suffisant).

Quelques soient les redirections que tu définis, ces opérateurs ne font que réaiguiller le flux texte qui entre ou sort d'une commande. Les variables internes à ce programme ne peuvent pas être récupérées de cette manière. Par contre on peut imaginer extraire de ce flux texte les informations importantes.

Exemple :

Je veux lister les paquets debian qui ne sont pas dans l'état ii de mon système. Cette information peut être déduite à partir de ce qu'écrit la commande dpkg -l.

dpkg -l liste les paquets installés, partiellement installés etc... et dans mon cas je veux dégager les paquets dans l'état "rc"
grep permet de filtrer des lignes conformément à un filtre (par exemple grep "^rc" ne conserve que les lignes qui commencent par rc.
cut permet d'extraire une "colonne" conformément à un séparateur.

Pour te faire une idée tape ces commandes :

dpkg -l
dpkg -l  | grep "^rc"
dpkg -l  | grep "^rc" | cut -d" " -f3


Dans ton cas c'est le même principe, on peut imaginer faire un pipe sur cm15 avec un script shell écrit à la main ou awk qui fait ce qui faut en fonction de la ligne reçue. Personnellement je partirais sur awk c'est ce qui me paraît le plus simple (et je t'invite donc à aussi lire un cours sur awk :p). Un programme awk permet d'écrire plus facilement ce que tu as commencé à écrire dans ton script shell.

Bonne chance
0