2010/1/18 Cosmin Dumitru <[email protected]>: > Salut, > > Incerc sa rulez un one-liner peste ssh. El arata cam asa: > > LOGFILES="cmdaemon mail.log messages syslog user.log" > ssh -v $LOGHOST bash -c "for logfile in $LOGFILES do echo 'NEW CLEAN > STATE : $CURRENTDATE' >> $LOGMASTER1/$logfile done" > > La rulare verbose obtin ceva de genul asta > > debug1: Sending command: bash -c for logfile in auth.log cmdaemon > daemon.log debug kern.log mail.log messages syslog user.log do > echo 'NEW CLEAN STATE : 12:31:35' >> /var/log/145.100.106.24/'' done > debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 > debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0 > bash: /var/log/145.100.106.24/: Is a directory > > > Asta inseamna ca variabila $logfile din for nu este inlocuita cu un > element din arrayul meu. Variabilele locale sunt inlocuite bine merci > (vezi arrayul de fisiere).
Offf... El face ce trebuie, nu ce ai vrea tu sa faca :) Tine cont ca apostroafele si semicolons si dolarii samd sunt expandati de bash inainte de a interpreta comanda, asa ca iti trebuie quoting corespunzator. Nu incerc sa-ti repar scriptul tau dar uite ceva mai simplu: list="a b c d" ; ssh canyon bash -c \'for foo in $list \; do echo foo is \$foo \; done\' Sincer e mai simplu sa trimiti un script si sa-l rulezi acolo, sau daca nu ai nevoie de stdin ai putea sa-l folosesti pe ala: cat script.sh | ssh remotehost -- Petre "don't thread on me" Ratiu _______________________________________________ RLUG mailing list [email protected] http://lists.lug.ro/mailman/listinfo/rlug
