Estou configurando um servidor com o cloud init e estou executando comandos um após o outro no arquivo de configuração.
Um dos comandos que preciso executar para configurar o ambiente do meu servidor é o PM2 para manter um aplicativo de servidor de nó on-line após a reinicialização. Eu sou capaz de ter a saída PM2 um comando especial que eu preciso para executar e estou armazenando esse comando em uma variável para executar na próxima linha.
Comando 1: (armazenando a saída)
pm2response=$(pm2 startup systemd)
Comando 2: (Executando o comando de resposta e aparando o log extra)
${pm2response#*Execute the following command:}
Quando executo o Command 2 no meu servidor de playground, ele gera o erro
[PM2][ERROR] Init system not found
Eu não entendo porque não consigo armazenar a saída do comando em uma variável e executar a variável. Eu copiei manualmente o comando exato que preciso executar no console e o executei com êxito. É apenas armazená-lo em uma variável que não funciona.
Comando que preciso executar como uma variável: (Isso funciona com sucesso)
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username
Comando Tentei executar como uma variável: (tem erros)
var='sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username'
$var
Por que isso não funciona?
Atualizar
Eu tenho o $ var para trabalhar usando aspas duplas no meu servidor.
var="sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username"
$var #works!
Embora este seja apenas um exemplo que eu estava testando em um servidor de playground. Para maior clareza da questão, estou realmente tentando avaliar o Comando 2:
${pm2response#*Execute the following command:}
Referência para o Comando 2:
Eu estou usando a substituição do parâmetro shell para que eu possa remover o log. Esta é a saída sem a substituição do parâmetro shell.
echo $pm2response
: (será exibido)
[PM2] Init System found: systemd [PM2] You have to run this command as root. Execute the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username
Então, adicionando a substituição de parâmetro do shell,% echo ${pm2response#*Execute the following command:}
: (será exibido)
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username