Récuperer toutes les execution d'une commande
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
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
auriez vous une idée ?
Merci.
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.txtmais 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:
- Récuperer toutes les execution d'une commande
- Invite de commande - Guide
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Commande terminal mac - Guide
- Comment recuperer une video sur youtube - Guide
- Récupérer mon compte facebook désactivé - Guide
1 réponse
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 :
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
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