I'm trying to control error output of a command parametrically but piping command is handled as another parameter. Test scripts below;
...$ cat printOutput.sh
#!/bin/sh
if [ $# -gt 0 ]; then echo "Wrong parameter $1"; exit; fi
echo "stdout"
echo "errout" >&2
...$ cat test.sh
#!/bin/sh
cmdBase="./printOutput.sh"
if [ -z $1 ]; then
#Do not pipe
cmd="$cmdBase"
else
#Pipe err
cmd="$cmdBase 2>/dev/null"
fi
echo "`$cmd`"
Error output should only print when --verbose option is selected but it prints anyways.Test script shows that 2>/dev/null
piping is handled as a parameter.
...$ ./test.sh --verbose
Wrong parameter 2>/dev/null
...$ sh -x ./test.sh --verbose
+ cmdBase=./printOutput.sh
+ [ -z --verbose ]
+ cmd=./printOutput.sh 2>/dev/null
+ ./printOutput.sh 2>/dev/null
+ echo Wrong parameter 2>/dev/null
Wrong parameter 2>/dev/null
Why/How is the piping handled as an argument here?