Назад | Перейти на главную страницу

Указание имени журнала для вывода на экран без использования .screenrc

В сценарии Bash я использую "screen -L" для записи выполненных команд в цвете. Например:

screen -L tree

Затем мы читаем файл журнала с less -R.

Когда этот сценарий выполняется, потенциально могут работать другие экраны, поэтому мы не знаем, какой файл screenlog. * Содержит наш вывод. Я не могу требовать от пользователя настройки его / ее .screenrc.

Есть ли способ указать имя журнала в командной строке или прочитать конкретный .screenrc команды?

У меня есть пара мыслей по этому поводу. Во-первых, обратите внимание, что вы можете управлять запуском screenrc при вызове screen через -c переключатель командной строки. Во-вторых, вы можете использовать переменные среды в своем .screenrc. Собирая все вместе, вот сценарий оболочки, который сделает что-то вроде того, что вы хотите:

#!/bin/bash

cat << EOF >/tmp/screenrc.$$
logfile /tmp/screenlog.$$
EOF

screen -c /tmp/screenrc.$$ -L
rm /tmp/screenrc.$$

echo "logfile is /tmp/screenlog.$$"

этот сценарий переопределяет пользовательский screenrc и помещает вывод в определенный файл. В этом случае я использую $$ чтобы сгенерировать имя файла, добавив имя процесса сценария. Обратите внимание, что обычно вы должны использовать mktemp вместо этого для создания безопасных временных файлов, но сейчас мне лень.

Также это полностью заменяет пользователя .screenrc. Если вы хотите по-прежнему считывать настройки из этого файла, вам следует изменить сгенерированный файл конфигурации на что-то вроде этого:

logfile /tmp/screenlog.$$
source $HOME/.screenrc

Использование:

tree -C > tree.log

В -C опция включает цвет, даже если вывод не на tty.

Так же:

ls -l --color=always > ls.log
grep --color=always foo bar > grep.log
ack --color foo > ack.log

У утилит, которые выводят цвет, часто есть способы принудительного его включения, когда вывод отправляется в канал или перенаправляется.

Кроме того, есть способ сделать это онлайн.

Войдите в командный режим на экране с помощью Ctrl + А, :, и используйте logfile команду с именем файла, который вы хотите в качестве аргумента:

logfile whatevernameyoulike.log

Источник: экранная страница руководства