Double do while loop (BASH)

3

Estou tentando fazer o seguinte dobrar enquanto boucle:

#!/bin/bash

#Router cisco
ls equipos/ |grep cisco |tr ' ' '\n' >> $$.cisco.tmp

config="/Users/joseluis/Desktop/prueba/config"

echo "XXXXXXXXXX ficheros"
echo $$.cisco.tmp
echo $config
echo "XXXXXXXXXX contenido tmp"
cat $$.cisco.tmp
echo "XXXXXXXXXX contenido config"
cat $config
echo "XXXXXXXXXX"


while IFS= read -r router
do
    echo "LOOP"
    echo $router

    echo "equipos/$router"

    while IFS= read -r config
    do

        grep "$config" "equipos/$router" &> /dev/null

            if [ $? == "1" ]; then
                echo "$router -> $config"
            fi  
    echo "---"
    echo "$config"
    echo "---"


    done <"$config"

done <"$$.cisco.tmp"

rm $$.cisco.tmp
$ ./script.sh 
XXXXXXXXXX ficheros
7405.cisco.tmp
/Users/joseluis/Desktop/prueba/config
XXXXXXXXXX contenido tmp
cisco.1
cisco.2
XXXXXXXXXX contenido config
a
1
XXXXXXXXXX
LOOP
cisco.1
equipos/cisco.1
---
a
---
cisco.1 -> 1
---
1
---
LOOP
cisco.2
equipos/cisco.2
./script.sh: line 41: : No such file or directory

Mas quando tentei avaliar a segunda condição que recebi o erro "Nenhum arquivo ou diretório", mas isso não é verdade, o arquivo existe. Por que recebo este erro? Alguém pode me ajudar?

Obrigado.

BR.

    
por José Luis 03.03.2017 / 21:16

1 resposta

2

O erro que você está recebendo se deve ao fato de você estar usando o mesmo nome ( config ) para duas variáveis diferentes.

  1. A variável com o nome do arquivo é lida no loop interno.
  2. A variável que recebe cada linha desse arquivo.

Assim, após a primeira vez que o loop interno termina, a variável antiga config agora tem a última linha do arquivo de configuração, e não seu caminho.

    
por 03.03.2017 / 21:36