質問

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 &
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top