Something that makes product support really difficult is if the interesting output from the customer's script run doesn't end up in the logfile (or the logfile says something different from what the customer saw). Especially if the customer already closed the window and can only tell you what he saw from the back of his head. Fortunately, there's a very easy way to make sure you catch all of your script's output.
#!/usr/bin/env bash exec > >(tee -a foo.log) exec 2> >(tee -a foo.log >&2)
As easy as that. All output to either
stderr will also end up in
logfile.txt. No more
» $logfile.txt, no more
| tee -a $logfile.txt, no more (forgotten)
2>&1 and all that stuff. If your script fails, you'll see exactly what the customer saw.