Eu tenho um diretório pessoal compartilhado que é montado automaticamente via NFS em todos os servidores UNIX nos quais efetuo login. Eu gostaria de ter um único .screenrc que (por exemplo) coloque o nome do host na linha de status fixo em uma cor diferente para indicar quando estou conectado à produção versus desenvolvimento; nossos nomes de host são tais que isso pode ser feito facilmente através do uso de correspondência de padrões.
Existe alguma maneira de colocar instruções condicionais no .screenrc? Um rápido grep da página de manual não parece revelar nada óbvio.
EDITAR:
Para esclarecer, eu já tenho uma linha de status rígida personalizada; Quero alterar algumas das cores / campos exibidos com base no nome do host em que a tela é chamada. Eu já tenho algo parecido com isso no meu PS1, no entanto, prefiro fazer isso na linha de status da tela enquanto pulo desses hosts para roteadores / switches, o que não me permite fazer nenhuma coloração imediata. Dessa forma, posso ter uma janela para produção e outra para desenvolvimento, com a cor da linha de status da tela me dizendo em qual delas estou rapidamente.
fonte
Respostas:
Eu vejo duas maneiras de fazer isso, a primeira é criar um arquivo .screenrc pelo host.
Como
.screenrc_serverA
,.screenrc_serverB
...No script de inicialização do shell, defina SCREENRC para algo como
.screenrc_`hostname`
É claro que você pode usar o comando source da tela para incluir algo como
.screenrc_default
em cada arquivo .screenrc_… personalizado, para que eles contenham apenas uma linha de legenda / status fixo e não o configuração inteira de cada vez.A segunda maneira seria executar comandos como
screen -X hardstatus lastline ...
(usando if testes para executar o comando com valor diferente para ... dependendo do nome do host) em seu script de inicialização do shell. Quando você fizer logon no servidor, a tela -X não fará nada porque a tela ainda não será iniciada, mas cada vez que você abrir uma nova janela na tela, o status do hardtop será atualizado.Obviamente, a 1ª solução é melhor, porque a segunda atualizará a linha de status definitivo toda vez que você abrir uma janela de notícias, o que provavelmente é inútil, pois o nome do host não será alterado.
fonte
hostname
". Eu tenho problema para incluir `no pósO @radius está no ponto certo do SCREENRC, mas não foi uma resposta muito completa, então vou elaborar…
~ / .bashrc
* Sempre use novos testes !
Uma palavra sobre caracteres de escape
A maneira correta de incluir cores nos scripts é com tput, não com caracteres de escape. Seus caracteres de escape são específicos para o seu terminal. O comando tput está ciente do terminal. Eu escrevi isso para quando eu preciso ficar chique nos meus scripts:
~ / bin / COLORS.sh
Também fiz um script para demonstrar o uso de tput. Você pode obtê-lo a partir desta essência.
Consulte:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
fonte
setaf
é usado o plano de fundo , embora deva sersetab
( b em vez de f ) e o segundo que usar9
como padrão não está funcionando para mim, talvez porque a versão tput não seja padrão (seja no seu caso ou na minha, eu simplesmente não sabem e isso realmente não importa muito)Basta configurá-lo em seu .screenrc como a variável hardstatus. Enquanto você estiver usando uma variável como% H para o nome do host, ela será alterada para corresponder a qualquer nome do host em que você trabalhe.
Fornecerá uma linha de status na parte inferior que parece
o nome do host é vermelho no preto, o horário é verde no preto, a data é amarela no preto. a janela marcada com * é a janela atual, mostrada em texto azul sobre fundo branco. janela marcada com - é a janela anteriormente ativa, mostrada em branco em preto. a janela 1, acima, não é atual nem anterior, e seria mostrada em branco no preto. as outras possibilidades mostrariam outros usuários conectados às janelas, brancos em preto e marcados com +.
exibir a hora também ajuda a manter a vida ativa se você fizer o ssh para servidores remotos para executar a tela, pois o tempo que muda a cada minuto manterá sua sessão ativa, mesmo que o shell esteja ocioso no lado remoto.
fonte
Você pode colorir a linha de status de dentro de um script de backtick imprimindo
\005{..r}
ou similar (r
para vermelho etc., assim como dentro de.screenrc
si), para que você possa fazer o hash do nome do host para chegar a um número ou ter várias instruções condicionais para definir a cor. Como exemplo, aqui está um script para alterar a cor e imprimir o nome do host para uso na tela:Em seguida, você adiciona uma entrada para esse script
.screenrc
e faz referência a ele dentro do status rígido ou da legenda como% 4`:Isso pressupõe que é improvável que o nome do host seja alterado, portanto, o tempo limite e a validade de 1 hora (3600 segundos); os bits que cercam a chamada para o backtick em si apenas colocam a data no início da linha e a hora após o nome do host.
Você pode até usar esse mecanismo para colorir a saída de um script, dependendo do valor do nível de carga da bateria, carga do sistema ou temperatura, supondo que você tenha acesso aos valores relevantes de um script de shell.
fonte
screen
fuga\005
- dessa forma, toda a formatação condicional pode ser colocada em um shell script muito mais legível, em vez daqueles já difíceis de analisarcaption
.hardstatus
diretivas de tela.Se você quiser evitar muitos scripts, tente o seguinte:
O grep imprimirá o nome do host apenas se corresponder a "prod", para que você possa conectá-lo a um backtick e à
%?
construção. Viola!fonte