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

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

   экран -L дерево

Затем мы читаем лог-файл с less -R,

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

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

4 ответа

Решение

У меня есть пара мыслей по этому поводу. Во-первых, обратите внимание, что вы можете управлять экраном запуска при вызове экрана через -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.$$"

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

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

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

На экране 4.06 и более поздних версиях файл журнала можно указать непосредственно в командной строке с помощью.

Для более ранних версий принятый ответ, вероятно, будет самым ясным вариантом.

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

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

Войдите в командный режим на экране через Ctrl-a : и используйте logfile команда с именем файла, который вы хотите в качестве аргумента logfile whatevernameyoulike.log

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

Почему бы тебе не сделать:

tree -C > tree.log

-C Опция включает цвет, даже если вывод не TTY. Так же:

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

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

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