On Feb 5, 9:26 pm, [EMAIL PROTECTED] (Rob Dixon) wrote:
> [EMAIL PROTECTED] wrote:
> > I am using perl alarm within a script and having an issue. I want to
> > access a host by first trying rsh and if that fails use ssh. I can
> > get the command to run with only one of the commands but when I add
> > both it fails. I must be missing something simple
>
> > Here is the info:
> > Part of script
> > .... else { $cmd="perl -e 'alarm(5);exec
> > qq/${rdist} -cR \$srcdir $ENV{host}:\$destdir ||${scp} -pr \$srcdir
> > $ENV{host}:\$destdir/'"; }
>
> > Error I get
> > Bareword found where operator expected at -e line 1, near "qq//usr"
> > syntax error at -e line 1, near "qq//usr"
> > Bareword found where operator expected at -e line 1, near "/bin/scp"
> > (Missing operator before p?)
> > Execution of -e aborted due to compilation errors.
>
> > I have already set the rdist variable and have even tried to specify
> > the rdist path.
>
> How simply awful. Lets reformat this so it's a little more legible:
>
> else {
> $cmd = "
> perl -e '
> alarm(5);
> exec qq/
> ${rdist} -cR \$srcdir $ENV{host}:
> \$destdir || ${scp} -pr \$srcdir $ENV{host}:
> \$destdir
> /
> '
> "
>
> }
>
> now from your error messages I would guess that
>
> $rdist = '/usr/bin/rdist'
>
> and
>
> $scp = '/usr/bin/scp'
>
> or something like that, so your Perl now becomes:
>
> else {
> $cmd = "
> perl -e '
> alarm(5);
> exec qq/
> /usr/bin/rdist -cR \$srcdir $ENV{host}:
> \$destdir || /usr/bin/scp -pr \$srcdir $ENV{host}:
> \$destdir
> /
> '
> "
>
> }
>
> Can you see now why you're getting a syntax error?
>
> But your concept is far too convoluted. You have a Perl process that's
> shelling out to another Perl process, that in turn is shelling out to
> run rsh and/or ssh. Also, where are $srcdir and $destdir coming from?
>
> I suggest you rewrite as a Perl program that shells out, if necessary
> only one level to rsh, and verifies the return status to determine
> whether to also use ssh in the same way.
>
> I hope this helps a little.
>
> Rob
Bit new to this so may sound like a simple question, but doesn't the
"||" mean if argument 1 fails run argument 2 - at least this is the
case in ksh (not sure if the same rule applies to perl). If this is
true then would'nt this spawn only one process?
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/