Действительно ли $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 &

}

То, когда запускаются, называют, это создает, устанавливает переменные для опций и пути к классу (материал Java), но когда эта строка делает?

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

$RUN, что-то встроило вообще?

Я хочу преобразовать это в новомодный сценарий, и выскочка требует, чтобы я использовал 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
задан 19 February 2013 в 07:03

1 ответ

Как уже упоминал Сет, $ RUN определен ранее в сценарии со строкой RUN="java ...". Строка выполняется, и стандартный вывод и стандартные сообщения об ошибках добавляются к $OUTFILE, что, вероятно, также определено в сценарии (или задано параметром командной строки).

2>>file

- это код bash для перенаправления потока stderr. По умолчанию stdout и stderr выводятся в tty (ваше приглашение bash), где они отображаются, но вы можете перенаправить вывод. По умолчанию использование >> file будет перенаправлять только стандартный вывод (материал, который печатается с использованием echo - это обычная форма вывода для большинства программ. Однако, когда программы хотят выдать ошибку, это будет стандартный поток вывода ошибок, который (по умолчанию) выводится на терминал и НЕ перенаправляется с помощью >>. Для перенаправления потока ошибок (возможно, для регистрации ошибок) вы используете 2>> file, который добавит его к [ 117]. Интересно, что тот же эффект, что и в сценарии, может быть достигнут при использовании &>> $OUTFILE, что является сокращением для «перенаправления как stdout, так и stderr».

0
ответ дан 19 February 2013 в 07:03

Другие вопросы по тегам:

Похожие вопросы: