Well, not to be all "let me tell ya", but if your will..
I would not use bash as a specified shell.
1. The users login shell which owns the script should be used.
2. This needs to be written in bash and called as a script.
3. DONE is a bash namespace

Logs should be used instead.


On Sat, Oct 26, 2013 at 9:19 PM, Tim Cuthbertson <gfxm...@gmail.com> wrote:

> I want to spawn a child process and have *all* output go to the same file.
>
> I tried this:
>
>     var fs = require('fs'), childProcess = require('child_process');
>     var output = fs.openSync('/tmp/output.log', 'w');
>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo
> DONE;'], {stdio: ['ignore', output, output]});
>
> Which presumably provides the same FD for both stdout and stderr in the
> child process. Looking at the file produced, I get:
>
>     STOUT
>     DONE
>
> stderr is apparently being ignored. Looking at the child_process docs,
> there's an example that opens *two* versions of the same file (in append
> mode), and uses this for stdout / stderr. Since I want to truncate the file
> (not append), I tried:
>
>     var fs = require('fs'), childProcess = require('child_process');
>     var output = fs.openSync('/tmp/output.log', 'w');
>     var output2 = fs.openSync('/tmp/output.log', 'a');
>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo
> DONE;'], {stdio: ['ignore', output, output2]});
>
> But it looks like the write stream is not playing nice and is overwriting
> the other stream's output, as I get:
>
>     STOUT
>     DONE
>     R
>
> So I guess I have to explicitly truncate the file first, then open two
> append streams to it?
>
>     fs.closeSync(fs.openSync('/tmp/output.log', 'w'));
>     var output = fs.openSync('/tmp/output.log', 'a');
>     var output2 = fs.openSync('/tmp/output.log', 'a');
>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo
> DONE;'], {stdio: ['ignore', output, output2]});
>
> Which finally gives me the desired output:
>
>     STOUT
>     STDERR
>     DONE
>
> For kicks, I also tried reusing a single append stream:
>
>     fs.closeSync(fs.openSync('/tmp/output.log', 'w'));
>     var output = fs.openSync('/tmp/output.log', 'a');
>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo
> DONE;'], {stdio: ['ignore', output, output]});
>
> But that gave me the same results as my initial attempt (no stderr at all).
>
>
> I guess I've discovered *how* to do this (my third attempt), but that
> seems pretty ugly. Can anyone suggest a better way? In python, we can
> explicitly redirect the child's stderr to stdout:
>
>     output = open('/tmp/output.log', 'w');
>     subprocess.Popen(['bash', '-c', 'echo STOUT; echo STDERR >&2; echo
> DONE;'], stderr = subprocess.STDOUT)
>
> Is there anything similar in nodejs, or am I stuck with explicitly
> truncating the file, followed by opening two append-mode descriptors?
>
> Cheers,
>  - Tim.
>
> --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to nodejs+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
<surgemcgee> Systems/Software Engineer

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to