Executar script em uma tela

Executar script em uma tela

Quero executar um script bash em uma tela separada. O script chama um programa algumas vezes, cada uma delas demorando muito para esperar. Meu primeiro pensamento foi simplesmente abrir uma tela e chamar o script, mas parece que não consigo desanexar (por ctrl-a d) enquanto o script está em execução. Então eu fiz algumas pesquisas e encontrei issoinstruçãopara substituir o shebang pelo seguinte:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Mas isso também não funciona (as opções não são reconhecidas). Alguma sugestão?

PS Ocorreu-me agora que isso screen -dmS name ./script.shprovavelmente funcionaria para meus propósitos, mas ainda estou curioso para saber como incorporar isso ao script. Obrigado.

Responder1

OShebangA linha que você viu pode funcionar em algumas variantes do Unix, mas não no Linux. As linhas shebang do Linux são limitadas: você só pode ter uma opção. A string inteira -d -m -S screenName /bin/bashé passada como uma única opção para screen, em vez de ser passada como palavras diferentes.

Se você deseja executar um script dentro da tela e não mexer com vários arquivos ou citações, você pode tornar o script um script de shell que invoca a tela, se ainda não estiver dentro da tela.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

Responder2

De acordo com as páginas de manual da tela:

  • screen -d -m Tela inicial no modo desanexado. Isso cria uma nova sessão, mas não é anexada a ela. Isto é útil para scripts de inicialização do sistema.
  • -S sessionname Defina o nome da nova sessão como sessionname.

Então, quando executei o comando que você forneceu:screen -dmS name ./script.sh

A tela inicia uma janela chamada name e executa automaticamente esse script.sh. Para voltar lá e ver o status, basta digitar:screen -r test

Agora com o Ubuntu 14.04, os comandos são um pouco diferentes. Tentar:

screen -d -m -S test

Agora, para executar o script, você precisará acessar o arquivo de configuração para fazer isso:

sudo vim /etc/screenrc

Uma vez lá, role para baixo e você verá:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Esta é a seção onde você precisará adicionar o nome do script para ser executado e isso deve permitir que você faça tudo o que precisa na tela.

Responder3

Isso é um pouco antigo, mas um dos poucos tópicos que consegui encontrar para fazer isso. Depois de brincar, a única maneira de fazer isso funcionar no modo desanexado com o Ubuntu 14. é

screen -d -m -t nameofwindow sh nameoflaunch.sh

O lançamento seria a segunda parte acima que abriga os comandos java atuais e a versão do servidor. Eu corro baunilha.

informação relacionada