Sponsored Content
Top Forums Shell Programming and Scripting Help required with Stderr and tee command Post 302980686 by stomp on Wednesday 31st of August 2016 08:07:53 PM
Old 08-31-2016
Having a demo program like this programm (I name it myprogram):

Code:
echo "this is stdout"
echo "this is stderr" >&2

You get the desired files err and log with this chain:

Code:
{ ./myprogram  3>&2 2>&1- >&3- | tee err ; } 2>&1 | tee log

... or without any output:

Code:
{ ./myprogram  3>&2 2>&1- >&3- | tee err ; } >log 2>&1

Explanation

Code:
3>&2 2>&1- >&3-

This swaps stdin and stderr - so you can duplicate(tee) stderr to file. I'm not sure about the whole thing. I tested and found out, that I can not leave out the compound command { ... }. I suppose it has to do with file descriptor 3, which is not available at the next process after the next pipe, because only stdout and stderr are forwarded to it, so I have to use the compound which hides that fd 3 thing, which is effectively stderr.

Look here for a more detailed explanation:
n>&m: Swap Standard Output and Standard Error (Unix Power Tools, 3rd Edition)

Last edited by stomp; 08-31-2016 at 09:39 PM..
These 2 Users Gave Thanks to stomp For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

'tee' STDERR output (ksh)

Hi everyone, KSH question: I know you can 'tee' STDOUT to have the output go to multiple targets; can you do the same with STDERR? For example: ls |tee /tmp/file.txt Will redirect STDOUT to both the screen and the '/tmp/file.txt' file. Is there a way of doing the same thing for... (5 Replies)
Discussion started by: gsatch
5 Replies

2. 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

3. Shell Programming and Scripting

STDERR to file & terminal using tee

Hi All, Solarix/Bash v3x Im trying to output any standard errors created by the script to a file using the below command: . runDTE.sh 2> "$DTE_ERROR_FILE" however the errors do get written to the dir/file stored in $DTE_ERROR_FILE but the error does not appear on the terminal screen in... (4 Replies)
Discussion started by: satnamx
4 Replies

4. UNIX and Linux Applications

Tee with pipe command.

cat work.txt M|324324|32424|3431 M|324324|32424|3431 N|324324|32426|3432 N|324324|32424|3434 M|324324|32424|3435 cat work.txt | tee $( grep '^M' > m.txt ) | $( grep '^N' > n.txt ) cehpny00:/home01/sr38632 $ cat m.txt M|324324|32424|3431 M|324324|32424|3431 M|324324|32424|3435 ... (2 Replies)
Discussion started by: rsampathy
2 Replies

5. Shell Programming and Scripting

Is there a way to tee stderr from a command that's redirecting error to a file?

I'm not a complete novice at unix but I'm not all that advanced either. I'm hoping that someone with a little more knowledge than myself has the answer I'm looking for. I'm writing a wrapper script that will be passed user commands from the cron... Ex: ./mywrapper.sh "/usr/bin/ps -ef |... (1 Reply)
Discussion started by: sumgi
1 Replies

6. UNIX for Dummies Questions & Answers

tee command within variable

Hello If anybody knows something about the following please help me. I am using HP unix. In a script called test.txt i have the following command echo ok | tee test1.txt It works fine.It prints ok on the screen and creates the file test1.txt and puts in the file the "ok". In the same... (2 Replies)
Discussion started by: kostasch
2 Replies

7. Shell Programming and Scripting

tee + more command

script1: #!/bin/ksh more test.txt script2: calling the script1 #!/bin/ksh /tmp/script1.sh 2>&1 | tee tee.log where test.txt contains ~1200 lines. When I execute the script2 the more command does not print pagewise it goes to the end of the line, when I remove the tee command it... (4 Replies)
Discussion started by: prasad111
4 Replies

8. Shell Programming and Scripting

How to "tee" stderr

In other words, print on both the screen and to a file (minus stdout)? Thanks again in advance (2 Replies)
Discussion started by: stevensw
2 Replies

9. UNIX for Advanced & Expert Users

Equivalents of tee command to find exit status of command

Hi, Want to log the output of command & check the exit status to find whether it succeeded or failed. > ls abc ls: abc: No such file or directory > echo $? 1 > ls abc 2>&1 | tee log ls: abc: No such file or directory > echo $? 0 Tee commands changes my exit status to be always... (7 Replies)
Discussion started by: vibhor_agarwali
7 Replies

10. Shell Programming and Scripting

Help with tee command

In the current directory , I have seven files . But when I use the following command , it lists eight files ( 7 files + file_list.xtx) ls -1 | tee file_list.xtx | while read line; do echo $line ; done Does the tee command create the file_list.xtx file first and then executes the ls -1... (1 Reply)
Discussion started by: kumarjt
1 Replies
tee(1)							      General Commands Manual							    tee(1)

NAME
tee - Displays the output of a program and copies it into a file SYNOPSIS
tee [-ai] file... STANDARDS
Interfaces documented on this reference page conform to industry standards as follows: tee: XCU5.0 Refer to the standards(5) reference page for more information about industry standards and associated tags. OPTIONS
Adds the output to the end of file instead of writing over it. Ignores the SIGINT signal. OPERANDS
Standard input is stored into, or appended to, the file specified. [Tru64 UNIX] The tee command can accept up to 20 file arguments. DESCRIPTION
The tee command reads standard input and writes to both standard output, and each specified file. The tee command is useful when you wish to view program output as it is displayed, and also want to save it in a file. The tee command does not buffer output, so you may wish to pipe the output of tee to more if more than one full screen of data is anticipated. NOTES
If a write to any file fails, the exit status of tee will be non-zero. Writes to all other specified files may be successful, and opera- tion will continue until standard input is exhausted. EXIT STATUS
The following exit values are returned: Successful completion. An error occurred. EXAMPLES
To view and save the output from a command at the same time, enter: lint program.c | tee program.lint This displays the standard output of the command lint program.c at the terminal, and at the same time saves a copy of it in the file program.lint. If program.lint already exists, it is deleted and replaced. To display and append to a file, enter: lint program.c | tee -a program.lint This displays the standard output of lint program.c at the terminal and at the same time appends a copy of it to the end of pro- gram.lint. If the file program.lint does not exist, it is created. ENVIRONMENT VARIABLES
The following environment variables affect the execution of tee: Provides a default value for the internationalization variables that are unset or null. If LANG is unset or null, the corresponding value from the default locale is used. If any of the internationalization vari- ables contain an invalid setting, the utility behaves as if none of the variables had been defined. If set to a non-empty string value, overrides the values of all the other internationalization variables. Determines the locale for the interpretation of sequences of bytes of text data as characters (for example, single-byte as opposed to multibyte characters in arguments). Determines the locale for the for- mat and contents of diagnostic messages written to standard error. Determines the location of message catalogues for the processing of LC_MESSAGES. SEE ALSO
Commands: cat(1), echo(1), script(1) Standards: standards(5) tee(1)
All times are GMT -4. The time now is 08:05 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy