Especificando um nome de log para saída de tela sem depender de .screenrc

6

Em um script bash, eu uso "screen -L" para registrar comandos executados em cores. Por exemplo:

   screen -L tree

Em seguida, lemos o arquivo de log com less -R .

Quando este script é executado, outras telas estão potencialmente em execução, portanto não sabemos qual screenlog. * contém nossa saída. Não posso exigir que o usuário personalize seu .screenrc .

Existe uma maneira de especificar um nome de registro na linha de comando ou ler comandos .screenrc específicos.

    
por Philippe Blayo 16.03.2011 / 17:31

3 respostas

10

Eu tenho alguns pensamentos sobre isso. Primeiro, observe que você pode controlar o screenrc de inicialização ao chamar a tela por meio do switch de linha de comando -c . Segundo, você pode usar variáveis de ambiente em seu .screenrc. Juntando tudo isso, aqui está um script de shell para fazer algo parecido com o que você quer:

#!/bin/bash

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

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

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

esse script substitui o usuário screenrc e coloca a saída em um arquivo específico. Nesse caso, estou usando $$ para gerar o nome do arquivo anexando o nome do processo de script. Observe que você geralmente deve usar mktemp para criar arquivos temporários seguros, mas eu sou preguiçoso agora.

Além disso, isso substitui completamente o usuário .screenrc . Se você ainda quiser ler as configurações desse arquivo, você deve alterar o arquivo de configuração gerado para algo como isto:

logfile /tmp/screenlog.$$
source $HOME/.screenrc
    
por 17.03.2011 / 02:59
2

Por que você não faz:

tree -C > tree.log

A opção -C força a cor mesmo quando a saída não é para um tty. Da mesma forma:

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

Os utilitários que emitem cores geralmente têm maneiras de forçá-lo quando a saída é enviada para um canal ou redirecionada.

    
por 17.03.2011 / 05:31
0

Como alternativa, há uma maneira de fazer isso on-line

Entre no modo de comando na tela através de Ctrl - a : e use o comando logfile com o nome do arquivo que você deseja como argumento logfile whatevernameyoulike.log

Fonte: man page da tela

    
por 21.06.2015 / 19:46