awk variável fica desassociada após set -euxo pipefail

0
PORT=3306
mysql_status='netstat -nltp |grep mysqld |awk -v port="$PORT" '{if (match($4,/:.+'"$port"'/)) {print "Yes"} }''

Eu tenho um problema sobre o ambiente shell. Eu uso o awk para filtrar o status de escuta mysql , onde eu uso a variável variável accept shell. Quando há

set -euxo pipefail 

no início do script.Erro presente.

port: unbound variable

Mas quando eu comento o comando set -euxo pipefail , o comando funciona bem. Como posso corrigir esse problema? Eu realmente quero usar set -euxo pipefail no script.

    
por focus zheng 01.11.2018 / 09:28

1 resposta

2

A lógica no seu Awk está incorreta, de certo modo, como você está tentando usar a variável definida pelo usuário port . Para comparações de regex, você pode usar diretamente o operador ~ em vez de match() conforme abaixo. Também grep é inútil aqui

netstat -nltp | awk -v port="$PORT" '/mysqld/ && $4 ~ port { print "Yes" }'

Quanto ao motivo do erro que você tem, devido à expansão incorreta entre aspas em torno de port , o shell o interpreta como uma variável indefinida e porque -u é definido em set , ele gera erro para o indefinido situação variável.

Além disso, a substituição de comando '' backquoted 'está desatualizada e propensa a erros, use o $(..) construct

mysql_status=$(netstat -nltp | awk -v port="$PORT" '/mysqld/ && $4 ~ port { print "Yes" }')
    
por 01.11.2018 / 09:39