我需要将bout中的stout和stderr重定向到单独的文件。 好吧,我完成了这个命令:
((/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 &
从命令行运行良好。
尝试将相同的命令放入 bash脚本
... 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 ...
导致如下错误:
root@operator:/opt/SEOC2# seoc2 start Starting servis... /usr/local/bin/seoc2: line 31: ((/usr/bin/java: dir or file doesn't exist
试图用$(),``等覆盖这个命令,但完全没有效果:(
任何建议或建议都会非常感激,已经玩了好几个小时了:/
thanx很多 雷
答案 0 :(得分:2)
如果将整个命令行存储在变量中,则必须使用eval
来执行它:
cmd="(($run -jar $cmd 2>&1 1>&3 | tee --append $err) 3>&1 1>&2 | tee --append $log) >> $combined 2>&1"
...
eval $cmd &