Você pode usar head
para extrair a primeira linha:
include_databases=$(… | head -n 1)
No entanto, isso silenciosamente ignorará quaisquer outras linhas. Você pode usar o awk para retornar um código de saída diferente se houver mais linhas:
include_databases=$(… | awk 'NR>1 {exit(2)} 1')
if [ $? -ne 0 ]; then
echo >&2 'mysql returned multiple lines! Aborting.'; exit 2;;
fi
Ou abaixo de set -e
:
include_databases=$(… | awk 'NR>1 {print "mysql returned multiple lines! Aborting." >"/dev/stderr"; exit(2)} 1')
Como alternativa, você pode armazenar a saída em uma variável e testar se ela contém uma quebra de linha. (Observe que a nova linha final do comando não está incluída na substituição do comando).
include_databases=$(…)
nl='
'
case $include_databases in
*"$nl"*) echo >&2 'mysql returned multiple lines! Aborting.'; exit 2;;
esac
No ksh / bash / zsh, mas não no sh simples, você pode escrever isso de uma forma mais compacta.
include_databases=$(…)
if [[ "$include_databases" = *$'\n'* ]]; then
echo >&2 'mysql returned multiple lines! Aborting.'; exit 2;;
esac