Antes de mais nada, não analisa ls
. Agora, o motivo do seu script falhar é porque você está passando "$PWD/*"
. Como isso é desejado, ele será expandido antes de ser passado para sua função em /path/to/dir/*
e, como não há nenhum arquivo chamado *
no seu PWD
, ele falhará.
No entanto, mesmo que funcionasse, isso o colocaria em um loop infinito.
O que você está procurando é:
#!/bin/bash
function loop() {
## Do nothing if * doesn't match anything.
## This is needed for empty directories, otherwise
## "foo/*" expands to the literal string "foo/*"/
shopt -s nullglob
for file in
do
## If $file is a directory
if [ -d "$file" ]
then
echo "looping for $file"
loop "$file/*"
else
echo "$file"
fi
done
}
loop "$PWD/*"
Isso, no entanto, falhará se o seu PWD
contiver quaisquer caracteres de espaço em branco. Uma maneira mais segura é:
#!/bin/bash
function loop() {
## Do nothing if * doesn't match anything.
## This is needed for empty directories, otherwise
## "foo/*" expands to the literal string "foo/*"/
shopt -s nullglob
## Make ** recurse into subdirectories
shopt -s globstar
for file in "$@"/**
do
## If $file is a file
if [ -f "$file" ]
then
echo "$file"
fi
done
}
loop "$PWD"