Como posso executar um script bash com tela no modo desanexado?

1

Eu fiz um script bash que contém o seguinte:

#!/bin/bash
screen -dmS xccda "$(cd /root/constella && ./daemon.sh)"
screen -dmS xccwa "$(cd /root/constella && ./wallet.sh)"
screen -dmS xprda "$(cd /root/Prosus_Money && ./daemon.sh)"
screen -dmS xprwa "$(cd /root/Prosus_Money && ./wallet.sh)"
screen -dmS litda "$(cd /root/LithiumBit/build/release/src && ./daemon.sh)"
screen -dmS litwa "$(cd /root/LithiumBit/build/release/src && ./wallet.sh)"
screen -dmS lukada "$(cd /root/luka/cryptonote/build/release/src && ./daemon.sh)"
screen -dmS lukawa "$(cd /root/luka/cryptonote/build/release/src && ./wallet.sh)"
screen -dmS chaucha "$(cd /root/daemons/ && ./chauchad)"
screen -dmS litecoin "$(cd /root/daemons/litecoin-0.15.1/src && ./litecoind)"

O que eu quero é que esse script execute esses scripts em sessões de tela, mas quando eu executo meu script com sh main.sh ou ./main.sh ele não abre sessões de telas e é isso que acontece

Quandoexecutadoindividualmente,cadaumdessesscriptséexecutadoassim

    
por Rodrigo 02.10.2018 / 23:13

1 resposta

2

Vamos começar apenas com as primeiras linhas do seu script. O problema afeta todos eles, mas é mais fácil lidar com apenas um.

#!/bin/bash
screen -dmS xccda "$(cd /root/constella && ./daemon.sh)"

Se você está declarando isso como um script bash , não use sh para executá-lo. Defina as permissões e execute-as como ./main.sh ou use o shell correto bash main.sh .

Agora, por que o script parece travar. A sessão screen é passada por uma cadeia de aspas duplas. De maneira um pouco simplista, isso significa que o shell pode avaliar expressões e variáveis começando com $ . Você incluiu uma instrução $( ... ) , que instrui o shell a executar seu conteúdo e a substituir por todo o resultado de qualquer coisa que tenha escrito para stdout . Obviamente, para que a substituição ocorra, o comando deve ser concluído. Mas o seu não. Além disso, você não queria a saída mesmo assim.

Em resumo,

  1. Use o interpretador de shell correto
  2. Não use aspas duplas aqui - use aspas simples para que o shell não analise o conteúdo
  3. Não tente avaliar o comando e use sua saída. Basta executá-lo.

Aqui está o início revisado do seu script; lembre-se de aplicar mudanças semelhantes em todo:

#!/bin/bash
screen -dmS xccda 'cd /root/constella && ./daemon.sh'
    
por 02.10.2018 / 23:42