Comunicando entre uma tela e um roteiro -- and-line campo com bash campo com scripts campo com gnu-screen camp askubuntu Relacionado O problema

Communicating between a screen and a script


0
vote

problema

português

Eu gostaria de escrever um script que inicia um processo em um screen , permitindo que ele continue a ser executado, mas extrai uma determinada parte da saída para uso no processo principal do script. < / p >.

Minha primeira ideia era usar um tubo nomeado para se comunicar entre os dois processos. No entanto, usando um tubo nomeado real só faz com que o script fique para sempre - as botas de tela para cima e funcionam bem, e eu posso acessá-lo mais tarde, mas o processo de terminal apenas trava sem retornar:

  apt-get0   

(o padrão de fundo e aguarda é um experimento; o problema persiste se eu mover o apt-get1 linha para o final.)

Se eu usar um arquivo normal, o apt-get2 reclama que o arquivo não existe. De qualquer forma, não consigo conseguir atingir esse objetivo original de se comunicar de dentro de um apt-get3 .

english

I would like to write a script that starts a process in a screen, letting it continue to run, but extracts a certain part of the output for use in the main process of the script.

My first idea was to use a named pipe to communicate between the two processes. However, using an actual named pipe just causes the script to hang forever -- the screen boots up and runs fine, and I can access it later, but the terminal process just hangs without returning:

pipe=/tmp/fwdpipe$$ trap "rm -f $pipe" exit  mkfifo $pipe  server=$(cat $pipe) &  screen -dmS jupyter screen -S jupyter -X stuff "cat foo" > $pipe\015"  wait echo $server 

(The background-and-wait pattern is an experiment; the problem persists if I move the server= line to the end.)

If I use a normal file instead, the cat complains that the file doesn't exist. Either way, I can't seem to achieve that original goal of communicating from within a screen.

           
 
 

Lista de respostas

0
 
vote

Você deve iniciar o comando screen antes de ler a partir do fifo . Este exemplo listará o diretório atual em screen e o erro de caminho inexistente será redirecionado para o FIFO.

#!/bin/bash [[ -p screen.fifo ]] || mkfifo -m 660 screen.fifo exec 3<>screen.fifo session=test screen -ls $session >&- || screen -dmS $session screen -S $session -X stuff 'ls $PWD nonexistent 2> screen.fifo ' & while IFS= read -r -u 3; do echo REPLY: $REPLY done

Você também pode usar tee para gravar para ambos screen e o FIFO:

#!/bin/bash [[ -p screen.fifo ]] || mkfifo -m 660 screen.fifo session=test screen -ls $session >&- || screen -dmS $session screen -S $session -X stuff "printf '%s\ %s\ ' hello world | tee screen.fifo " text="$(cat < screen.fifo)" echo "$text"
 

You should start the screen command before reading from the fifo. This example will list the current directory in screen and the nonexistent path error will be redirected to the fifo.

#!/bin/bash      [[ -p screen.fifo ]] \   || mkfifo -m 660 screen.fifo      exec 3<>screen.fifo  session=test    screen -ls $session >&- || screen -dmS $session   screen  -S $session \           -X stuff 'ls \$PWD nonexistent 2> screen.fifo\n' &      while IFS= read -r -u 3; do   echo REPLY: $REPLY   done 

You can also use tee to write to both screen and the fifo:

#!/bin/bash  [[ -p screen.fifo ]] \     || mkfifo -m 660 screen.fifo  session=test  screen -ls $session >&- || screen -dmS $session screen  -S $session \         -X stuff "printf '%s\\\n%s\\\n' hello world | tee screen.fifo\n"  text="$(cat < screen.fifo)" echo "$text" 
 
 

Perguntas relacionadas

12  Retendo as cores do prompt de bash ao iniciar uma sessão de tela  ( Retaining bash prompt colors when starting a screen session ) 
Quando eu ssh em uma caixa Ubuntu Lucid, o prompt é tudo bonito, com cores. Tudo é o padrão, tanto quanto eu sei. Aqui está minha tela externa de $ PS1: [e...

4  Como criar sessão de tela na inicialização com comando que não termina quando o comando termina  ( How to create screen session on startup with command that doesnt end when comma ) 
Eu quero editar meu arquivo rc.local para iniciar algumas sessões do servidor cada uma na sua própria tela GNU. No entanto, sempre que eu paro um servidor, ...

1  Execute o processo de tela do segundo após o primeiro processo de tela concluído?  ( Run second screen process after first screen process complete ) 
É possível iniciar um processo de tela, mas deixá-lo esperar que outro processo de tela de funcionamento seja concluído? Basicamente criando dois processos de...

2  Tela GNU: Comandos em execução em diferentes janelas quando a tela é iniciada  ( Gnu screen running commands in different window when screen is started ) 
O arquivo .screenrc permite que o usuário especifique que eles querem várias janelas abertas quando a tela é a primeira execução. Por exemplo. screen -t my...

34  X11 Encaminhando sobre a tela GNU, é possível?  ( X11 forwarding over gnu screen is it possible ) 
Eu uso a tela GNU constantemente. Mas, eu tenho tentado descobrir se houver algum tempo para obter x11 aplicativos para encaminhar sobre a tela quando sou ssh...

2  Tela GNU pendura no Pandaboard [Fechado]  ( Gnu screen hangs on the pandaboard ) 
. Esta questão é improvável que ajude a futuros visitantes; Só é relevante para uma pequena área geográfica, um momento esp...

0  Como podemos separar a tela?  ( How we can detach from screen ) 
Eu sou novo no Linux. Eu costumava trabalhar no Windows (teste de desempenho, teste de carga, testes de fumaça e assim por diante). Eu estou fazendo um trabal...

27  Execute um programa com a tela GNU e imediatamente se separe depois  ( Run a program with gnu screen and immediately detach after ) 
Eu estou tentando descobrir como escrever um script que iniciaria o (s) programa (s) em sessões (s) de tela do GNU na inicialização do sistema. Eu estou tenta...

3  Como conectar a tela / tmux / byobu para dbus?  ( How to connect screen tmux byobu to dbus ) 
Às vezes na GUI eu uso byobu , mas recebo o seguinte erro com qdbus . Não foi possível conectar-se ao servidor D-BUS: org.freedesktop.dbus.error.noserv...

5  Execute o comando no anexo da tela do GNU  ( Execute command on gnu screen attachment ) 
É possível para a tela GNU detectar quando uma sessão foi anexada e para executar um comando? (O comando será um script de shell que eu escrevi) obrigado. ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.