[SHELL] Une histoire "pipe"

Une histoire "pipe" [SHELL] - Shell/Batch - Programmation

Marsh Posté le 10-12-2009 à 10:27:19    

Bonjour
 
Beaucoup trop compliqué à synthétiser dans un titre.
J'imagine que je suis pas le premier à essayer de faire ça, mais peut-etre que je me trompe de voie pour faire ce que j'aimerai faire :
 
J'ai un programme que j'ai écris (  [:volta] ) qui me permet de checker dans mes logs qui sont dans /var/log/auth ce qui concerne les connexions ssh de mes utilisateurs. Lequel programme peut utiliser différents paramètres, dont " -u " pour lequel je peux spécifier l'utilisateur qui m'intéresse. Appliqué tel quel, j'ai un affichage à l'écran des logs concernés
Exemple :  

./log_ssh -u tuxbleu


m'affiche les log de tuxbleu, et si je veux me stocker ca dans un fichier texte, je fais vulgairement

./log_ssh -u tuxbleu > tuxbleu.txt


 
Bon, magnifique. Mon idée maintenant, c'est de lancer ce programme pour tous mes users, sans les lister à la main un par un, et pour chaque user envoyer le résultat dans un fichier user.txt
Je me dis que la liste de mes users, c'est plus ou moins la liste des répertoires présents dans /home.
 
Donc j'aimerais passer en paramètre "-u" à ma fonction log_ssh la liste résultat de " ls /home/ "
 
un truc genre :

ls /home/ | ./log_ssh -u


Si vous voyez l'idée  :sweat:  
 
Ptet que le pipe c'est pas la bonne solution, et que je devrais insérer dans mon programme log_ssh un "for rep in /home loop..."
 
Vous avez des pistes à me suggérer ?
 
 :jap:


---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 10-12-2009 à 10:27:19   

Reply

Marsh Posté le 10-12-2009 à 10:48:36    

le pipe est clairement pas ce qu'il te faut.  
 
par contre tu peux faire un for:

Code :
  1. for u in `ls /home`; do /log_ssh -u $u; done


 
mais effectivement ca serait plus sexy en créant une option -a ou --all dans ton script et y faire le for.

Reply

Marsh Posté le 10-12-2009 à 14:22:33    

hey merci :) , je teste ca dessuite
 
Tiens puisque tu parles de "--all", je cherchais justement à faire des options à plusieurs lettre, avec la méthode que j'utilise chaque lettre serait une option propre. J'imagine que c'est une question de syntaxe. Si quelqu'un peut me souffler la syntaxe correcte ?
 
Pour ma part je fais :  
 

#!/bin/bash
 
while getopts u:lesq option
do  
case...


Je voulais une option "?" mais ça ne fonctionne pas, et dans l'idée pour certaines options, j'aurais voulu mettre des mots , genre --user plutôt que -u, voir laisser les 2 possibilités.
Oui je sais, google est mon amis, mais si une âme généreuse se sent de me dire comment on fait [:ddr555]


---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 10-12-2009 à 14:49:48    

pataluc a écrit :

le pipe est clairement pas ce qu'il te faut.  
 
par contre tu peux faire un for:

Code :
  1. for u in `ls /home`; do /log_ssh -u $u; done


 
mais effectivement ca serait plus sexy en créant une option -a ou --all dans ton script et y faire le for.


Surement une question de syntaxe, mais lorsque je fais : for u in 'ls /home'; do echo $u ; done
Le résultat c'est "ls /home" et non pas le résultat de la commande en question  :sweat:  
 
Edit : résolu en faisant :

Code :
  1. case $option in
  2. a)
  3. cd /home
  4. for u in * ; do echo ${u} ; done
  5. cd /root

Message cité 1 fois
Message édité par tuxbleu le 10-12-2009 à 15:02:16

---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 10-12-2009 à 15:27:42    

sinon, regarde du coté de getopt au lieu de getopts, je crois qu'il gère les options longues.

Reply

Marsh Posté le 10-12-2009 à 15:37:04    

pataluc a écrit :

sinon, regarde du coté de getopt au lieu de getopts, je crois qu'il gère les options longues.


 :jap:  
 
Si ça intéresse quelqu'un un script qui filtre un peu les logs ssh par user ou provenance (lan / exterieur), je veux bien le poster, même si bon ca n'a rien d'extraordinaire.


---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 10-12-2009 à 22:53:49    

tuxbleu a écrit :


Surement une question de syntaxe, mais lorsque je fais : for u in 'ls /home'; do echo $u ; done
Le résultat c'est "ls /home" et non pas le résultat de la commande en question  :sweat:


 
Parce que c'est avec des ` et pas des ' je pense.
 

Reply

Marsh Posté le 10-12-2009 à 22:58:43    

fhr a écrit :


 
Parce que c'est avec des ` et pas des ' je pense.
 


oh  :??: ah ben merde alors ! je vais essayer ça demain matin !


---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 11-12-2009 à 10:02:27    

Oui, les ' ' c'est pour fixer du texte, les ` ` c'est pour demander l'exécution d'une commande.

Reply

Marsh Posté le 11-12-2009 à 10:18:11    

Tuxerman12 a écrit :

Oui, les ' ' c'est pour fixer du texte, les ` ` c'est pour demander l'exécution d'une commande.


 [:chronoklazm]  
En effet, ça marche bien mieux, j'avais trouvé un subterfuge, mais là c'est impeccable.


---------------
Mon topic de vente - Mon feed-back
Reply

Marsh Posté le 11-12-2009 à 10:18:11   

Reply

Marsh Posté le 06-01-2010 à 16:12:38    

ou un truc du genre
 
ls /home/ | xargs -n1 ./log_ssh -u


---------------
oui oui
Reply

Marsh Posté le 06-01-2010 à 17:48:06    

art_dupond a écrit :

ou un truc du genre
 
ls /home/ | xargs -n1 ./log_ssh -u


 
oh ?
intéressant à essayer  :jap:


---------------
Mon topic de vente - Mon feed-back
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed