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

Raspunde prin e-mail lui