Sponsored Content
Top Forums UNIX for Dummies Questions & Answers multiple variables assignement (stdout/stderr outputs) Post 302447966 by agama on Tuesday 24th of August 2010 11:06:00 PM
Old 08-25-2010
Quote:
Originally Posted by anthalamus
I would like to assign the output of stdout to a variable and that of stderr to another one, and this without using temporary files/named pipes.
I agree with Corona688, cannot be done without pipes. However, you said 'named pipes' which technically are different beasts so I offer this "mess" for you to consider.

Code:
#!/usr/bin/env ksh 
(ls *.jpg bfoo | sed 's/^/STDOUT /') 2>&1 | awk ' 
        /STDOUT/ { 
                gsub( "STDOUT ", "" ); 
                o1 = o1 $0 "; "; 
                next;
        } 
        {
                o2 = o2 $0 "; ";
        } 
        END{ 
                printf( "%s~%s\n", o1, o2 ); 
        }' |  IFS="~" read  stdout stderr
echo "stdout=$stdout"
echo "stderr=$stderr"

It all can be crammed on one line; I've formatted it to be easier to read. It makes the assumption that the tilde (~) is never found in either the stdout or stderr stream. The records of each output stream are separated with semicolons, so if the output contains them, things will be difficult.

Running the script in my small test environment produced:
Code:
$ t20   
stdout=bar.jpg; foo.jpg; snapshot.jpg; 
stderr=ls: bfoo: not found;

I tested this in Kshell; I don't think it will work under bash as bash has issues executing a command and reading the output into variables. It will also be subject to the limits that Kshell might impose on variable value lengths or that awk might impose on string lengths. If you have a command that produces rather long output/error you could have problems.

Regardless, interesting brain twister.
This User Gave Thanks to agama For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Redirect stdout and stderr

How can I redirect and append stdout and stderr to a file when using cron? Here is my crontab file: */5 * * * * /dir/php /dir/process_fns.php >>& /dir/dump.txt Cron gives me an 'unexpected character found in line' when trying to add my crontab file. Regards, Zach Curtis POPULUS (8 Replies)
Discussion started by: zcurtis
8 Replies

2. Shell Programming and Scripting

precedence of stderr and stdout

#!/usr/bin/perl open(STDOUT, ">>$Textfile") open(STDERR, ">>$Textfile") print "program running\n"; $final = join("+", $initial,$final) #5 close (STDOUT); close (STDERR);Hi all, above is my perl code. Notice i have captured the stdout and stderr to the same textfile. my code is expected to... (1 Reply)
Discussion started by: new2ss
1 Replies

3. Shell Programming and Scripting

How to redirect stderr and stdout to a file

Hi friends I am facing one problem while redirecting the out of the stderr and stdout to a file let example my problem with a simple example I have a file (say test.sh)in which i run 2 command in the background ps -ef & ls & and now i am run this file and redirect the output to a file... (8 Replies)
Discussion started by: sushantnirwan
8 Replies

4. Shell Programming and Scripting

How to use tee with stdout and stderr?

I have been doing this: make xyz &> xyz.log &; tail -f xyz.log The problem with this is that you never can ge sure when "make xyz" is done. How can I pipe both stderr and stdout into tee so both stderr and stdout are copied both to the display and to the log file? Thanks, Siegfried (3 Replies)
Discussion started by: siegfried
3 Replies

5. Shell Programming and Scripting

sending stdout and stderr to a file

working on a c sell script I think I understand the concept of it, which is: filename >> file.txt (to appaend) or filename | tee -a file.txt (to append) The problem is that my shell script is used with several parameters, and these commands don't seem to work with just filename. They... (2 Replies)
Discussion started by: mistermojo
2 Replies

6. UNIX for Dummies Questions & Answers

Redirecting several outputs to /dev/stdout

I have an executable that, depending on its input, outputs to either one file or several. It usually prints nothing on screen. The usual way to call this program is to specify an input and output filenames, like this: ./executable.exe -i inputfile -o outputfileIt will then try to use the output... (1 Reply)
Discussion started by: aplaydoc
1 Replies

7. Red Hat

Make STDERR readable as STDOUT

Hi all. I am trying to use backticks in Perl to put STDERR into a string. The code is... $readkey_test = `perl -MTerm::ReadKey -e 1`; print $readkey_test; if ($readkey_test =~ m/]/) { print "ReadKey not installed...\n"; } else { print "ReadKey installed...\n"; } If it comes up... (3 Replies)
Discussion started by: austinharris43
3 Replies

8. Shell Programming and Scripting

stderr/stdout

Can somebody explain to me why the diff output is not going to stderr? Yet when I issue a diff from the command line the return code is -ne 1. I am guessing diff always writes to stdout??? Is there away I can force the difff to write to stderr USING THE CURRENT template. If possible, I... (5 Replies)
Discussion started by: BeefStu
5 Replies

9. Shell Programming and Scripting

stdout, stderr redirection

Hi all, can someone help me with the next redirection? i want to redirect the stdout+stderr of a command to the same file (this i can do by prog &> file) but in addition i want to redirect only the stderr to a different file. how can i do this please? (in BASH) thanks. (4 Replies)
Discussion started by: eee
4 Replies

10. Shell Programming and Scripting

[stdin / stdout] Strategies for redirecting outputs

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)
Discussion started by: Marmz
5 Replies
OMPI-IOF(1)							     Open MPI							       OMPI-IOF(1)

NAME
ompi-iof, orte-iof - Displays a copy of the output streams from a process. NOTE: ompi-iof, and orte-iof are exact synonyms for each other. Using any of the names will result in exactly identical behavior. SYNOPSIS
ompi-iof [ options ] Options ompi-iof will display a copy of the indicated stdout, stderr, and/or stddiag streams from the designated process. -pid | --pid The pid of the mpirun executing the process whose streams are to be copied -stdout | --stdout Display a copy of the specified process' stdout. If no options are specified, this will act as the default -stderr | --stderr Display a copy of the specified process' stderr. -stddiag | --stddiag Display a copy of the specified process' stddiag. -rank | --rank The rank of the process whose output is to be copied. DESCRIPTION
ompi-iof displays a copy of the indicated stdout, stderr, and/or stddiag streams from the designated process. At this time, a ctrl-C must be used to terminate the program. The program will terminate cleanly, telling the associated mpirun to close the requested streams before exiting. SEE ALSO
orterun(1) 1.4.5 Feb 10, 2012 OMPI-IOF(1)
All times are GMT -4. The time now is 08:13 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy