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