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,
- Use o interpretador de shell correto
- Não use aspas duplas aqui - use aspas simples para que o shell não analise o conteúdo
- 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'