Issue
I have this line in script.
if [ "$(ps -p $$ -o comm=)" = "bash" ]; then
exec 1> >(tee -ia $SDIR/bash.log)
fi
It only works in bash, but when the shell is not bash, that is in ksh, I get this error
./col[2]: 0403-057 Syntax error at line 3 : `>' is not expected.
Any way to make the script generic? I want basically to create a output log file of the script if it runs in bash/ksh and also display on screen.
Tried
if [ "$(ps -p $$ -o comm=)" = "bash" ]; then
exec 1> >(tee -ia $SDIR/bash.log)
fi
but does not work.
Solution
Any way to make the script generic?
You can get output to both screen and log in both shells, which I guess is even more generic than you asked. Use a compound command ({ ... }
) to wrap everything whose output you want to capture in the log, and pipe its output into tee
.
Be aware that the use of a pipe will force the compound command into a subshell, which is not analogous to your version. That could conceivably have unwanted side effects, but I'm inclined to guess that that's unlikely in your particular case.
Example:
SDIR=/foo/bar
{
echo 'Hello, World!'
} | tee -ia "${SDIR}/bash.log"
Answered By - John Bollinger Answer Checked By - Gilberto Lyons (WPSolving Admin)