anilfunde has asked for the wisdom of the Perl Monks concerning the following question:

I am writing cvs utility for our internal project. I want to export cvsroot for same. i tried below code
    $Expect::Debug = 1;
    $Expect::Log_Stdout = 1;
    $Expect::Exp_Internal = 1;

    my $cvs_root  = 'export CVSROOT=:pserver:user11@10.x.x.X:/export/DEMO' . "\r\n";
    my $echo_cmd = "echo \$CVSROOT \r\n";
    
    
    #cvs, give me a token
    my $shell_obj = new Expect or die "Couldn't spawan a process : $!\n";
    
    #pty return all sends itself as it is. Making your reposnse unpredictable. Get it corrected
    $shell_obj->raw_pty(1);

    $shell_obj = Expect->spawn("$cvs_root") or die "Couldn't start a program: $!\n";

while spawning process to export CVSROOT, i am getting this error when executing this script
Cannot exec(export CVSROOT=:pserver:user11@10.x.x.x:/export/demo
): Permission denied

Not sure what i am missing here. Monks could you please give me hint or direction to walk on.
  • Comment on Expect.pm spawn for exporting evn variables

Replies are listed 'Best First'.
Re: Expect.pm spawn for exporting evn variables
by Corion (Patriarch) on Jun 01, 2015 at 14:09 UTC

    Most likely, ->spawn() does not spawn a shell. If you change your code to first spawn a shell and then run your shell commands, it might work.

    As an alternative, setting elements in %ENV also sets the environment for child processes, so you can do that:

    $ENV{ CVSROOT }=':pserver:user11@10.x.x.X:/export/DEMO'; ... $shell_obj = Expect->spawn('echo $CVSROOT') or die "Couldn't start + a program: $!\n";

    Note that this only works if echo is an external program and not only a shell builtin.

      thanks, spawning a shell worked!
Re: Expect.pm spawn for exporting evn variables
by pme (Monsignor) on Jun 01, 2015 at 17:49 UTC
    Why do you use 'expect' at all? CVS is not interactive.