После двойного щелчка скрипта на рабочем столе, показать вывод в терминале

Я пытаюсь создать демонстрационную виртуальную машину. На рабочем столе у ​​меня есть скрипт foo.sh, и он выводит стандартный вывод в foo.log (например, с some command > foo.log)

. Когда я дважды щелкаю по скрипту, он генерирует файл foo.log. Тем не менее, я хотел бы, чтобы скрипт также представлял стандартный вывод в реальном времени (например, используя tail -f foo.log).

Как я могу это сделать? Нужно ли направлять вывод в два места?

3
задан 25 January 2012 в 00:52

3 ответа

Это может быть не самый элегантный подход, но, похоже, он работает:

Добавьте следующее в скрипт:

touch foo.log
uxterm -e "tail -f foo.log" &
some command > foo.log

с gnome-Terminal, замените uxterm -e на gnome-terminal -x.

Спасибо Hilltop Yodeler за указание на это решение.

0
ответ дан 25 January 2012 в 00:52

Стандартная команда tee Unix позволяет перенаправить стандартный ввод команды в один или несколько файлов, а также распечатать ее на стандартный вывод. Таким образом, вы можете сделать что-то вроде

myscript.sh|tee mylog.log

при условии, что myscript.sh просто печатает на стандартный вывод (что на самом деле упростит его)

Чтобы открыть окно терминала при нажатии на значок, можно обернуть его в другой скрипт:

xterm -e "myscript.sh | tee mylog.log; read -p FINISHED"

Разница с вашим решением в том, что у вас есть выбор: закрыть окно терминала после завершения скрипта или показать сообщение «Нажмите любую клавишу для продолжения ...» - с помощью tail -f терминал практически не может узнать, когда завершился ваш скрипт, поэтому вам нужно прервать его с помощью Ctrl-C.

Кроме того, tail -f должен быть менее эффективным, чем печать непосредственно на терминал, но это, вероятно, не очень важно в наши дни.

0
ответ дан 25 January 2012 в 00:52

Я сделал предложение Сергея, и если оно сработало, это может быть проблемой пути. Вот точная команда, которую я использовал, и результатом было открытие xterm, показывающее вывод скрипта и затем сообщение «Нажмите return для закрытия». Я предлагаю вам добавить путь перед именем сценария и, возможно, именем файла журнала.

xterm -e "./myscript.sh | tee ./mylog.log; read -p Press\ return\ to\ close\ "

Вся моя версия myscript.sh состояла в том, чтобы повторить несколько строк, но это сработало.

0
ответ дан 25 January 2012 в 00:52

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

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