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.sh
provavelmente 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.