1

我需要将 bash 中的 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 --附加 /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 "开始服务..."
 31 $cmd &
 32 pid=`ps -eo pid,args | grep seoc2.jar | grep -v grep | 剪切-c1-6`
 33 如果 [ ! -z $pid ]; 然后
 ...

导致这样的错误:

   root@operator:/opt/SEOC2# seoc2 start
   开始服务...
   /usr/local/bin/seoc2: 第 31 行: ((/usr/bin/java: 目录或文件不存在

试图用 $( )、` ` 等来覆盖这个命令,但完全没有效果:(

任何建议或建议将不胜感激,已经玩了几个小时:/

非常感谢Rene

4

1 回答 1

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 &
于 2012-07-18T14:05:46.337 回答