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/


Reply via email to