2013-03-29 2 views
0

У меня есть следующий файл сценария, который выполняет основной класс Java и печатает некоторые данные журнала на терминале. Я хочу перенаправить все, что печатает эту программу на другой терминал (например,/dev/pts/1, но это не сработало для меня). Как это сделать ?перенаправляет выходы журнала на другой терминал

#!/bin/sh 

# Usage: ./zipfs_mount.sh file.zip /mount/point 

. ./build.conf 

LD_LIBRARY_PATH=./jni:$FUSE_HOME/lib $JDK_HOME/bin/java \ 
    -classpath ./build:./lib/commons-logging-1.0.4.jar \ 
    -Dorg.apache.commons.logging.Log=fuse.logging.FuseLog \ 
    -Dfuse.logging.level=DEBUG \ 
    Main -f -s $2 $1 > /dev/pts/1 
+0

Я бы посоветовал, что, если это возможно, изменить программу Java, чтобы использовать надлежащие рамки протоколирования. Вход в stderr - это плохая практика ... Если это невозможно, вы можете перенаправить вывод в файл и 'tail -F', который ... Хотя вам нужно будет реализовать механизм для очистки файла со времени к времени, чтобы сделать ограничение на размер. – ppeterka

ответ

0

То, что вы написали должны работать, при условии, что программа записывает свой журнал на стандартный вывод, а не Stderr и /dev/pts/1 правильное устройство для другого терминала. Вы можете проверить это с чем-то вроде:

echo Hello > /dev/pts/1 

Это должно сделать Hello появиться в другом окне терминала. Если это не так, проверьте, какое устройство использует терминал с помощью команды tty.

Если ваши журналы программы в стандартный вывод, вы можете перенаправить его тоже:

program >/dev/pts/1 2>&1  # send stderr to the same place as stdout