http://www.perlmonks.org?node_id=1011365


in reply to Automating a shell session: cd does not work

Did I miss something really obvious?
Well...

The following code shows a successful 'cd' for me

#! /usr/bin/perl use strict; use IPC::Run qw( start pump finish ); my ($input, $output, $errput); $input=""; $output=""; my $subp = start([ '/bin/bash' ], \$input, \$output, \$errput) or die $@; print $errput; $input .= "cd /work/drjohnson\n"; pump $subp until length $input == 0; $input .= "pwd\n"; pump $subp until $output =~ /\n/; print "$output\n"; $subp->finish;
If you have a runnable example of where it doesn't work for you, I'd be glad to try it. You might also try IPCRUNDEBUG. Do an 'export IPCRUNDEBUG=details' before running your script. I believe what the author meant was that you couldn't do things like 'cd' (well, chdir) in your parent script between pump calls.

fnord

Replies are listed 'Best First'.
Re^2: Automating a shell session: cd does not work
by pokki (Monk) on Jan 02, 2013 at 23:52 UTC

    Yes, your example works for me too. I'll take a closer look at my code, there's probably a glaring mistake somewhere in my loop. I'll sleep over it and see if my brain can spot it better tomorrow :)

    In any case this will probably end on Bitbucket soonish for the world to poke at it and point more bugs, so if I haven't found anything tomorrow I'll take you up on your offer and post the repo URL here.

    Thanks for your time and hints so far.

Re^2: Automating a shell session: cd does not work
by pokki (Monk) on Jan 03, 2013 at 10:13 UTC

    OK, it was definitely my fault. I keep telling myself I need to stop assuming the modules I use are at fault.

    I was doing $input = "new command\n" instead of $input .= "new command\n", so I guess in some cases existing input got clobbered before being pumped into the harness.

    Thanks again!