Script de chamada recursiva

4

Estou tentando criar um script que listará todos os arquivos e diretórios em um determinado diretório. Eu quero fazer este script para se chamar, no final, mostrando todos os arquivos e diretórios. Eu sei que você pode facilmente fazer isso com encontrar , mas eu quero praticar scripts recursivos , e eu não não sei porque meu parâmetro recursivo dado não é o que eu esperava, seu valor não muda.

for source in 'find $1 -maxdepth 1 -type d,f'
do
        if [ -f $source ]; then
                echo "'basename $source' is a file"
        fi
        if [ -d $source ]; then 
                echo "'basename $source' is a directory"
                . Script.sh $source
        fi
done
    
por Peter 23.03.2017 / 00:44

1 resposta

3

A seguinte linha é o culpado:

. Script.sh $source

Embora seja possível fazer recursão dessa maneira, é difícil raciocinar, porque as variáveis alteradas no próximo nível de recursão também são alteradas no chamador. Provavelmente você só quer invocá-lo sem ter que fazer isso:

Script.sh $source

Ou melhor ainda:

"$0" "$source"

A obtenção confiável do script de origem em todos os casos é um pouco complicada, no entanto. Muito melhor ainda é usar funções para fazer recursão (no Bash):

function f()
{
   ...
   f different_args
   ...
}

E declare todas as variáveis usadas em f as local para que elas não sejam transformadas pela chamada recursiva para f .

    
por 23.03.2017 / 01:02