std.process spawnShell/pipeShell dont capture output of the shell
Colin Grogan
grogan.colin at gmail.com
Wed Oct 9 07:54:31 PDT 2013
On Wednesday, 9 October 2013 at 14:27:30 UTC, Jesse Phillips
wrote:
> On Wednesday, 9 October 2013 at 11:22:26 UTC, Colin Grogan
> wrote:
>> "
>> ~/test$ ./mess ls
>> Executing: ls
>> STDOUT: mess
>> STDOUT: text.txt
>>
>> "
>> Thats all fine, however, I'd expect it to print another
>> "~/test$" at the end, as if its an interactive shell waiting
>> for input.
>
> It is extracting the output of the program, 99.9% of the time
> this is what everyone wants and including the shells behavior
> would be terrible.
But its exactly what I want ;)
> If you run bash, then it is going to be waiting for stdin so
> you'd need to pass it "ls" and "exit" to get the output and
> quit. I'm not sure this would get you want you wanted.
That would imply that the call to
pipeShell("/bin/bash", Redirect.all);
is blocking. However, its not meant to be blocking is it not?
That new /bin/bash process is meant to run in parallel to the
main process?
If I use the program to execute the following script:
#!/bin/bash
for i in {1..100}
do
for j in {1..100}
do
echo "$i, $j"
done
sleep 15
done
and monitor the output that is printed, I can see that it is
indeed sleeping for 15 seconds, so the pipeShell call is
definitely non-blocking.
I assumed it should behave the same way for /bin/bash. It is just
another process after all, surely pipeShell knows nothing more
about /bin/bash that it does about my silly script above?
More information about the Digitalmars-d-learn
mailing list