produces
I've verified the shell is actually redirecting stdout as expected, but when I run ls it is not inheriting this change. If I leave out the >&2, it produces no output, meaning it's only re-redirecting stdout to my console when I don't redirect stdout into stderr -- in other words, it only redirects stdout back to the console when I tell it not to use stdout at all! Why is it restoring stdout at all?
Last edited by Corona688; 02-18-2010 at 12:58 PM..
Reason: fix typos in source
ls -l /proc/self/fd >&2
You are redirecting stdout (what ls is producing) into stderr (&2).
Quite so. I have also already redirected /dev/null into stdin, and stdout into /dev/null.
Quote:
Unless you tell the script to dump stderr to /dev/null...:
I don't want to redirect stderr, and have already redirected stdin and stdout to /dev/null. I expected ls to inherit stdin and stdout from the shell, but instead the shell for some copies stderr into stdout -- but only when I redirect ls's stdout. It doesn't just do this for terminals, either -- I've seen it do so for files, so I boiled the problem down to its minimum representation here.
Quote:
...it will be output to the shell you are running the script in.
Which is /dev/null, of course, given the prior redirections. But when I redirect it into stderr, the shell takes the extraordinary step of restoring stdout to its previous state.
Last edited by Corona688; 02-18-2010 at 01:34 PM..
The default location for standard error is the screen. So it stands to reason that by redirecting ls to stderr (which you haven't redirected elsewhere) the output of ls will go to the screen.
Well.. let's say i need to write a pretty simple script.
In my script i have 2 variables which can have value of 0 or 1.
$VERBOSE
$LOG
I need to implement these cases:
($VERBOSE = 0 && $LOG = 0) => ONLY ERROR output (STDERR to console && STDOUT to /dev/null)
($VERBOSE = 1... (5 Replies)
I want to differentiate the STDOUT and STDERR messages in my terminal .
If a script or command is printing a message in terminal I want to differentiate by colors,
Is it possible ?
Example:
$date
Wed Jul 27 12:36:50 IST 2011
$datee
bash: datee: command not found
$alias ls
alias... (2 Replies)
Hi,
i am using the below program to read from the standard input or to write to standard out put.
i know that using highlevel functions this can be done better than what i have done here.
i just want to know is there any other method by which i find the exact number of characters ( this... (3 Replies)
All,
Ok...so I know I *should* be able to control a process's stdin and stdout from the parent by creating pipes and then dup'ing them in the child. And, this works with all "normal" programs that I've tried. Unfortunately, I want to intercept the stdin/out of the scp application and it seems... (9 Replies)
Hi,
I am working on a project where I have to generate and execute nasm code on-the-fly. I generate the code in a file program.asm and then execute it.This output is to stdout which i redirect to an output file which i read back to compare results:
system("nasm -f elf program.asm >... (5 Replies)
Hi,
i know how to
a) redirect stdout and stderr to one file,
b) and write to two files concurrently with same output using tee command
Now, i want to do both the above together.
I have a script and it should write both stdout and stderr in one file and also write the same content to... (8 Replies)
Hi all
I've run into a snag in a program of mine where part of what I entered in at the start of run-time, instead of the current value within printf() is being printed out.
After failing with fflush() and setbuf(), I tried the following approach
void BufferFlusher()
{
int in=0;... (9 Replies)
Hi everyone, first post here.
Anyone who isn't interested in the background, press pagedown :).
I sometimes need to make scripts for little things I need in the infrastructure at the company I work at. Currently I am trying to make a wrapper script for a proprietary image-deployment program.... (2 Replies)
Hi,
Program A: uses pipe()
I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using:
* child
-> dup2(fd, STDOUT_FILENO);
-> execl("/path/PROGRAM B", "PROGRAM B", NULL);
* parent
-> char line;
-> read(fd, line, 100);
Question:... (2 Replies)