comando send para uma sessão de tela já em execução

11

Eu tenho tentado enviar comandos para uma sessão de tela gnu em execução (4.00.03) no opensolaris, mas não consigo fazê-lo executar nenhum comando através de qualquer combinação de screen -X

Ok, inicio uma sessão na tela screen -S teste, em seguida, tentei screen -r -X "date"mostrar apenas a data em que me reconectaria a ela. Mas nem uma mensagem de erro nem saída na tela aconteceu. Tentei com tantas combinações que nem me lembro.

Alguma dica de como fazer isso?

A razão pela qual estou fazendo isso é porque tenho um programa que não é um daemon e desejo iniciá-lo em uma sessão de tela, para que mais tarde possa ver o que está acontecendo.

Der Hochstapler
fonte
1
parece que esse "comando" sobre o qual eles estão falando nas páginas de manual é para um comando de tela, como configurações para a própria sessão de tela. Em vez de enviar comandos para o shell, que é aberto na sessão de tela. Então, alguém uma idéia de como fazer isso acontecer com um script bash?
@Axon: Sim, -X envia comandos de tela, não comandos de shell, mas a tela possui um comando 'tela' que pode abrir novas janelas de tela.

Respostas:

18

Na verdade, é bem simples. Você pode usar o seguinte:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'emula pressionando a Entertecla

NOTA: esse 'material' é um comando de tela. http://www.gnu.org/software/screen/manual/screen.html#Stuff

o porteiro
fonte
Você poderia especificar o que "material" representa? Isso é um nome ... ou comando ... ou outros parâmetros?
Cerin
Funciona de fato, mas eu não diria que é simplesmente;) É como passar eventos pressionados por tecla e passar nova linha para a tela. Não existe apenas o comando de execução de tela normal ...?
ducin
@Cecin: stuffé um comando de tela para 'coisas' uma string em stdin
Konrad
Isso é muito bom, mas por algum motivo não funciona com "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'", por que?
e271p314 12/02
isso não funciona, a menos que eu execute o comando duas vezes ... e em linhas de comando separadas ... se eu screen -d -m -S sessionname; screen -S sessionname -X [...]não fizer nada, nunca funcionará, mesmo (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]que não faça nada, exceto criar uma nova sessão de tela que não faça nada. down-voto
user3338098
5

Parece que você quer:

$ tela -S teste -d -m -c / dev / null - sh -c 'date; exec $ SHELL '

-S test: nomeie esta sessão
-d -m: tela inicial desanexada
-c / dev / null: ignore ~ ​​/ .screenrc (forneça um arquivo diferente ou solte esta opção,
  como necessário)
-: opções de final de tela
sh -c 'date; exec $ SHELL ': comando para que a tela seja executada, observe que, se este comando
  era apenas 'data', então a tela sairia imediatamente. se você não quiser sair
  tela após o comando sair, você pode usar:
    $ screen -S test -d -m -c / dev / null - seu comando aqui

Ou talvez você queira apenas dtach .


fonte
Executar isso resulta em nada. Nenhuma mensagem de sucesso ou erro, mas screen -listmostra que nenhuma sessão está aberta.
Cerin
Essa resposta funcionou para mim. A chave era a - para finalizar as opções da tela.
Plazgoth
1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Abra uma nova janela (com o título title ) em uma sessão existente chamada session_name e execute shell_command (com argumentos opcionais args )

Jeremy Kao
fonte