Bash script - store stderr in a variable
bash, redirect, scripting, stderr, stdout
Solution
Try redirecting stderr to stdout and using `$()` to capture that. In other words:
VAR=$((your-command-including-redirect) 2>&1)
Since your command redirects stdout somewhere, it shouldn't interfere with stderr. There might be a cleaner way to write it, but that should work.
Edit:
This really does work. I've tested it:
#!/bin/bash
BLAH=$((
(
echo out >&1
echo err >&2
) 1>log
) 2>&1)
echo "BLAH=$BLAH"
will print `BLAH=err` and the file `log` contains `out`.
Problem
I'm writing a script to backup a database. I have the following line: ``` mysqldump --user=$dbuser --password=$dbpswd \ --host=$host $mysqldb | gzip > $filename ``` I want to assign the stderr to a variable, so that it will send an email to myself letting me know what happened if something goes wrong. I've found solutions to redirect stderr to stdout, but I can't do that as the stdout is already being sent (via gzip) to a file. How can I separately store stderr in a variable $result ?