Executando a sessão de tela desanexada, mas sem terminação no mesmo evento

5

Aqui estão já muitas perguntas como esta, mas cada uma recomenda (uma variante da) a seguinte solução:

screen -dmS somename bash -c "/path/to/script; bash -l"

por exemplo. quando o script terminar, execute um novo bash .

Infelizmente, isso não funciona para mim, porque

  • o script usa a variável $ BASHPID para algo
  • as execuções de script são executadas para sempre, por ex. precisa terminá-lo com CTRL-C
  • e após o término eu preciso ter o shell mesmo como executa o script (mesmo $BASHPID )

Então, a questão é:

  • Como iniciar o screen no modo desanexado (por exemplo, na inicialização) - normalmente isso é feito pelo -dm
  • deve iniciar o shell
    • melhor, se puder iniciar como shell de "login", por exemplo o que lê meu .profile , mas isso pode ser superado com o source ~/.profile no script
    • o script inicia algum outro programa (binário) que será executado até CTRL-C
  • e após o término do script eu preciso pegar o mesmo bash (com o mesmo $BASHPID (porque preciso rodar outros scripts o que depende dele)

Em suma, precisamos simular o seguinte trabalho interativo:

  • inicie screen
  • echo $BASHPID
  • executar alguns comandos dentro da tela (o último é executado até CTRL-C) - por exemplo, execute o /path/to/script
  • desanexar (ctrl-a d)

Após o acima, depois, eu posso fazer

  • reconectar ( screen -ARR )
  • CTRL-C
  • e pode continuar ... com o mesmo
  • echo $BASHPID # produzirá o mesmo que acima

Alguma ideia? (pensando no -X mas não funciona, em algum lugar eu provavelmente cometendo um erro)

    
por jm666 25.05.2015 / 16:40

1 resposta

3

Parece que a resposta aqui é para o seu caso de uso. Resumindo:

bash --init-file <(echo "yourcommand")
    
por 25.05.2015 / 16:50