i need to redirect stout and stderr in bash each to separate file. well i completed this command:
((/usr/bin/java -jar /opt/SEOC2/seoc2.jar 2>&1 1>&3 | tee --append /opt/SEOC2/log/err.log) 3>&1 1>&2 | tee --append /opt/SEOC2/log/app.log) >> /opt/SEOC2/log/combined.log 2>&1 &
which works fine running from a command line.
trying to put the very same command into bash script
... 12 cmd="(($run -jar $cmd 2>&1 1>&3 | tee --append $err) 3>&1 1>&2 | tee --append $log) >> $combined 2>&1" ... 30 echo -e "Starting servis..." 31 $cmd & 32 pid=`ps -eo pid,args | grep seoc2.jar | grep -v grep | cut -c1-6` 33 if [ ! -z $pid ]; then ...
leads to error like this:
root@operator:/opt/SEOC2# seoc2 start Starting servis... /usr/local/bin/seoc2: line 31: ((/usr/bin/java: dir or file doesn't exist
tried to cover this command by $( ), ` ` etc but with no effect at all :(
any suggestion or advice would be very appreciated, playing around for hours already :/
thanx a lot Rene
If you store the whole command line in a variable you have to use eval
to execute it:
cmd="(($run -jar $cmd 2>&1 1>&3 | tee --append $err) 3>&1 1>&2 | tee --append $log) >> $combined 2>&1"
...
eval $cmd &