Bash para loops e nomes de host e como gerá-los

2

Por que isso não funciona?

NODE_ROOT=node0
INFRA_DOMAIN=example.com
for host in $NODE_ROOT{1..3}.$INFRA_DOMAIN; do echo $host; done

Estou esperando:

node01.example.com
node02.example.com
node03.example.com

No entanto, recebo:

.example.com
.example.com
.example.com

Como faço isso corretamente?

    
por nnachefski 28.02.2016 / 09:26

3 respostas

3

Substituir

$NODE_ROOT{1..3}.$INFRA_DOMAIN

por

${NODE_ROOT}{1..3}.$INFRA_DOMAIN
    
por 28.02.2016 / 14:22
3

O problema com o seu script é que o Bash não consegue interpretar $NODE_ROOT{1..3} corretamente. Para ajudar, você precisa incluir a variável entre aspas, " , que geralmente é aceita como 'boa prática' em qualquer caso. Você também pode usar a sintaxe "${VARIABLE}" -type para ajudar o Bash também.

Por exemplo,

NODE_ROOT=node0
INFRA_DOMAIN=example.com
for host in "$NODE_ROOT"{1..3}."$INFRA_DOMAIN"; do echo $host; done

ou

for host in "${NODE_ROOT}"{1..3}."$INFRA_DOMAIN"; do echo $host; done

Leitura adicional:

por 28.02.2016 / 15:45
0

Você pode simplesmente modificar seu script para ler:

NODE_ROOT=node0
INFRA_DOMAIN=example.com
for n in {1..3}; do echo ${NODE_ROOT}${n}.${INFRA_DOMAIN}; done
    
por 28.02.2016 / 09:35

Tags