The snippet below shows how to redirect STDOUT to the STDIN of one script and the STDERR to the STDIN of another.
You cannot use a pipe for both because it will only redirect the file descriptor connected at fd1, normally STDOUT unless you change it. When you use a pipe everything to the right becomes a different program, so STDERR needs a different solution.
The solution is to redirect fd2 before you use the pipe on fd1.
$ crontab -l # This cron entry sends STDERR to MyErrorLogger.sh and STDOUT to MyLogger.sh * * * * * ./MyScript.sh 2> >(MyErrorLogger.sh) | MyLogger.sh $ cat MyLogger.sh #!/bin/bash # This takes STDIN and sends it out to a file that has the date in its name cat - >> mylog_$(date +%F).log $ cat MyErrorLogger.sh #!/bin/bash # This takes STDIN and sends it out to a file that has the date in its name cat - >> myerrors_$(date +%F).log $ cat MyScript.sh #!/bin/bash # This sends sample text to both STDOUT and STDERR echo "Hello world!" | tee /dev/fd/2
No comments:
Post a Comment