Gostaria de iniciar algum aplicativo dentro da sessão da tela, mas a partir de um script.
Sem script, eu apenas lançaria a tela, em seguida, abriria N janelas com crtl-ac e executaria programas em cada janela.
Eu tentei o seguinte
screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log
Mas quando eu anexo a cauda da sessão não está sendo executada. Se eu anexar a sessão logo depois screen -d -m -S startup
e executar screen -S startup -X exec tail -f /var/log/messages
em outro terminal, ela funcionará.
Perdi algo ?
Edite após a resposta AlexD:
Uma meia solução de trabalho é
screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log
O comando de encadeamento da tela (aquele após -X) com o comando está funcionando enquanto exec provavelmente não é porque o exec espera que uma janela atual seja definida enquanto não houver uma atual quando a tela for desanexada. Obrigado a AlexD por essas dicas.
Mas há um efeito colateral estranho: quando o programa para (se você anexar a sessão da tela e apertar a cauda ou a cauda), a janela da tela será fechada.
Portanto, o comportamento não é o mesmo que Crtl-A c e execute o comando
Outro efeito colateral é que você não pode encadear 2 comandos
fonte
screen
sempre termina quando o comando com o qual se foi lançado extremidades - é uma característica normal da ferramenta :) ..assim se você correrscreen top
, quando você sairtop
,screen
vai sair tambémRespostas:
O
screen -S test -X screen command
comando é o que você precisa para adicionar janelas à sua sessão do daemon, mas não pelos motivos que você indica. Funciona porque -X usa um comando de tela e não um comando de shell, e o comando de tela para criar uma janela é chamado, confusamente, de tela. Não há comando de tela exec. Também não há encadeamento, a menos que você construa seu comando usando scripts de shell (assim:)screen -S script -X screen sh -c 'command1; command2;'
.Chamando
screen -S test -X screen
com nenhum comando é inútil porque o comando padrão é um shell, e depois de ter gerado uma concha, você não tem uma maneira não-interativo (e não desonesto) para executar comandos dentro dessa shell. É melhor executar o comando por si só, sem um shell interativo. Um efeito colateral é que, quando o comando sai, a janela da tela não tem mais filhos e fecha.Agora, você pode solicitar que a tela mantenha a janela aberta de qualquer maneira, depois que o comando for encerrado. Use o
zombie
comando screen para ativar isso. Sua sequência se parece com:Para reconectar interativamente:
E, finalmente, você pode reescrever esses comandos -X como um script screenrc.
Screenrc:
Roteiro:
fonte
Se você deseja o mesmo efeito que
Ctrl-A c
você deve usar emscreen
vez deexec
:Além disso, você pode mover seus comandos acima para
$HOME/.screenrc-younameit
arquivo (semscreen -S test -X
prefixo) e iniciarscreen -c $HOME/.screenrc-younameit
quando quiser criar uma sessão de tela específica.fonte
está usando byobu uma opção?
fonte
Eu estava fazendo a mesma coisa hoje à noite, queria abrir a tela com vários arquivos pré-abertos. Demorei um pouco para entender tudo isso, mas eu finalmente desenvolvi o seguinte, que parece funcionar muito bem:
Isso criará seis telas diferentes, com as telas 1 a 5 abrindo vários arquivos. Eu não sei todas as especificidades, mas 'coisas' essencialmente informa à tela o seguinte texto citado não é um comando de tela. O 'eval' elimina tudo o que está contido nas aspas. Sem isso,
screen -p 4 -S CS140 -X stuff "vim cs140-ps2/src/threads/intr-stubs.h\015"
simplesmente envia o texto citado sem executá-lo. O Eval lerá '\ 015' como uma nova linha e, assim, executará o texto anterior.Em termos de outros detalhes,
screen -p 1 -S CS140 -X CMD
informa ao shell para enviar o 'CMD' para a primeira janela da sessão de tela denominada 'CS140'.Espero que ajude!
fonte