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.


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


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 .


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 )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.