Como posso obter o bash para avaliar um comando PM2 armazenado em uma variável?

1

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
    
por Jonathan002 03.09.2017 / 08:10

1 resposta

1

Experimente uma destas linhas:

var="sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username"

$var

var1=$("sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username")

$var1

O erro do que você usou acontece porque as expressões não se expandem entre aspas simples, use aspas duplas para isso:

var='sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username'
$var
    
por George Udosen 03.09.2017 / 08:25