Problema:
O armazenamento do resultado do comando na variável portcheck
não funciona como esperado.
Meu script contém esse método
#!/bin/bash
...
status() {
portcheck=$(nc -z -v -w5 localhost 8443)
echo "*${portcheck}*"
if [[ $portcheck == *refused* ]]; then
echo "Application is stopped"
elif [[ $portcheck == *succeeded* ]]; then
echo "Application is started"
else
echo "state unknown"
fi
}
Quando executo o myscript, recebo este resultado:
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> **
> state unknown
Mas o que eu gostaria de ter é que o resultado do comando é armazenado em variável portcheck
e a saída deve se parecer com
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> *Connection to localhost 8443 port [tcp/*] succeeded!*
> Application is started
Eu tentei várias variantes de acordo
link
e outros
por exemplo,
portcheck='nc -z -v -w5 localhost 8443'
em vez de
portcheck=$(nc -z -v -w5 localhost 8443)
Mas não funcionou.
O que estou fazendo errado?
Histórico:
O comando
nc -z -v -w5 localhost 8443
verifica se a porta é conectável.
Ele retorna
Connection to localhost 8443 port [tcp/*] succeeded!
se a porta estiver "aberta" e
nc: connect to localhost port 8443 (tcp) failed: Connection refused
se a porta estiver "fechada".
Isso funciona bem se eu apenas executar o comando plain no bash.