How to redirect error to a file?

1,954

Solution 1

The line which causes the error is date =$(date), that error is sent to stderr. At that stage, you're not redirecting stderr anywhere. The subsequent line sends stderr to $filename, but it's not that line which causes the error.

One of the ways to get the effect you want, you would run your script and direct stderr to somewhere else at the same time, so,

./myscript 2>> errors.txt

at that point, errors.txt will contain your error.

So the issue is, the line generating the error is an error in the script itself, not an error caused by an external command the script calls which has it's output redirected. i.e. it's the top level script output you need to redirect.

Solution 2

The shell emits an error message when it reaches line 5. The shell's error stream is not redirected at this point.

If you write date= $(date) 2>/dev/null, the “command not found” message comes from the shell, not from the command whose error stream is redirected. Therefore you'll still see the error message.

To avoid seeing the error message, put the whole command inside a group and redirect the error stream from the whole group:

{ date= $(date); } 2>/dev/null

With braces, the command is still executed in the parent shell, so it can change its environment and other state (not that it does here). You can also put the command in a function body, or in a subshell (commands inside parentheses, which are executed in a separate shell process).

You can redirect the file descriptors of the shell permanently (or at least until the next time you change them) by using a redirection on the exec builtin with no command name.

exec 2>/dev/null
# From this point on, all error messages are lost
date= $(date)
…
exec 2>/some/log/file
# From this point on, all error messages go to the specified file
Share:
1,954

Related videos on Youtube

tomrs
Author by

tomrs

Updated on September 18, 2022

Comments

  • tomrs
    tomrs over 1 year

    I have got to download a zip file from a server using HTTP Authentication in my Scala project.I have the following two questions.

    1.) Is there any Scala or Java library that i can use for file download involving Http Authentication ?

    2.) Also, any Scala library i can use for unzipping the folder ?

    Please Help Thank You.

  • Richard Fortune
    Richard Fortune over 11 years
    Another strategy would be to surround several lines in your script with {...} 2>> errors.txt or (...) 2>> errors.txt. The second is less efficient but behaves in ways that are useful in certain circumstances. (Read about "subshells" to learn more.)
  • ronnie
    ronnie over 11 years
    Thanks for suggesting the alternatives. What is {} called in bash. I am aware of <() and $() process and command substitution respectively but not of {}.