$RUN 是要执行的内置命令吗?

$RUN 是要执行的内置命令吗?

我有一个 .sh 脚本,可以启动我的 java 服务(这个脚本不是我写的)。

有人能解释一下这实际上是如何执行的吗?

start() {
 ..
 ..

   # setup classpath
  . $ROOT/bin/_cp.sh

  RUN="java -Dlog.root=$VAR $JOPTS $CP $MAIN -v"

  # start
  $RUN 2>>$OUT_FILE >>$OUT_FILE &

}

当调用 start 时,它会为选项和类路径(java 内容)构建变量集,但是这一行什么时候执行呢?

$RUN 2>>$OUT_FILE >>$OUT_FILE &

$RUN 是内置的东西吗?

我想将其转换为 upstart 脚本,upstart 要求我使用exec如下方式:

script
        [ "$enabled" = "1" ] || [ "$force_start" = "1" ] || exit 0
        # Setup Serviio specific properties
        JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dderby.system.home=$SERVIIO_HOME/library -Dserviio.home=$SERVIIO_HOME -Xmx512M -Xms20M -XX:+UseParNewGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20"
        # construct classpath
        cd $SERVIIO_HOME
        CLASSPATH="config"
        for i in lib/*.jar; do
                CLASSPATH="$CLASSPATH:$i"
        done
        # write to syslog - for debugging
        # logger -t $0 -- "starting: /usr/bin/java $JAVA_OPTS -classpath $CLASSPATH org.serviio.MediaServer"
        exec /usr/bin/java $JAVA_OPTS -classpath $CLASSPATH org.serviio.MediaServer
end script

答案1

正如 Seth 提到的,$RUN 先前在脚本中用该行定义RUN="java ..."。执行该行,并将标准输出和标准错误消息都附加到该行,该$OUTFILE行可能也在脚本中定义(或由命令行参数指定)。

2>>file

是用于重定向 stderr 流的 bash 代码。默认情况下,stdout 和 stderr 都输出到 tty(您的 bash 提示符),它们在那里显示,但您可以重定向输出。默认情况下,使用>> file只会重定向标准输出(使用打印的内容echo- 这是大多数程序的常用输出形式。但是,当程序希望输出错误时,这将进入标准错误输出流,默认情况下,该流将打印到终端,而不是使用 重定向>>。要重定向错误流(可能用于错误记录),您可以使用2>> file,它会将其附加到file。有趣的是,使用 可以实现与脚本中相同的效果&>> $OUTFILE,这是“重定向 stdout 和 stderr”的简写。

相关内容