Перенаправить вывод Xterm в файл журнала - PullRequest
0 голосов
/ 15 октября 2018

Мне не удалось найти ответ на эту проблему.У меня есть три программы, запущенные в xterm для сценария автоматизации демонстрации.Мне нужно зарегистрировать результаты окон xterm.Прямо сейчас мой сценарий выглядит следующим образом:

#!/bin/bash/sh

echo "NOTE - THIS PROCESS TAKES APPROXIMATELY 60 SECONDS TO RUN"

    cd ~/myProject/ProgramOne
    xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

    cd ~/myProject/ProgramTwo
    xterm -e ProgramOne progtwo.config 2>&1 /tmp/logs/p2.txt &

    cd ~/myProject/ProgramThree
    xterm -e ProgramOne progthree.config 2>&1 /tmp/logs/p3.txt &


# allow the scripts to collect data
sleep 60

# kill the xterm sessions from running since this is just a demonstration
pkill -9 xterm

echo "******************************************"
echo "START PROGRAMS SCRIPT COMPLETE"
echo "******************************************"   

Я проверил, что ~/myProject/ProgramOne и ~/myProject/ProgramTwo и ~/myProject/ProgramThree все существуют, как и /tmp/logs/*

Файлы создаются, просто в них ничего нет и они НЕ содержат вывод окон xterm, который я вижу во всплывающем окне с сотнями строк информации.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Сработало следующее изменение в команде:

xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

до

xterm -e 'ProgramOne progone.config 2>&1 | tee /tmp/logs/p1.txt' &
0 голосов
/ 15 октября 2018

xterm не пишет в стандартный вывод;скорее он отображает вывод любой команды, которую он вызывает в своем окне.Вам нужно перенаправить вывод ProgramOne, а не вывод xterm.

И что-то, чего я не заметил, когда изначально писал этот ответ: ваше перенаправление неверно.Вы передаете /tmp/logs/p1.txt в качестве аргумента xterm.2>&1 перенаправляет stderr в stdout, но не принимает аргумент имени файла.(Да, вы можете смешивать перенаправления с аргументами программы. Например, echo >hello.out hello будет записывать hello в hello.out)

Например, изменить

xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

на

xterm -e 'ProgramOne progone.config >/tmp/logs/p1.txt 2>&1' &

(я предполагаю, что вы хотите отправить ProgramOne s stdout и stderr на tmp/logs/p1.txt.)

(Вы также можете указать xterm записать его вывод в файл, используя опцию -l, но это может быть отключено, и вывод может включать форматирование символов, которые вы, вероятно, не хотите.)

...