Como usar o find para preencher a variável no shell script

0

Eu estou fazendo um simples script shell, um trabalho chato de repetição. Script altera o diretório corretamente, e agora eu quero executar outros scripts com base no argumento que eu digitei ao executar o script. Outros scripts estão espalhados em subdiretórios e cada um é único. Então eu quero inserir apenas o nome do arquivo e deixar script descobrir em qual subdiretório é esse arquivo.

Eu tentei algo assim:

filename="default.ini"
while [ $# -gt 0 ] 
do
    case "$1" in
        -f) filename="$(find ./ -name $2)"; shift;;
        -*) echo >&2 \
            "usage: $0 [-v] [-f file] [file ...]"
            exit 1;; 
        *)  break;;     # terminate while loop
    esac
    shift
done

echo $filename

Mas, o anúncio não retorna nenhum resultado, portanto, ele permanece default.ini . Existe outra maneira de resolver isso?

    
por Miller 14.05.2014 / 11:07

1 resposta

1

Eu sugeriria que essa é uma maneira mais idiomática de analisar opções:

filename="default.ini"
v_opt=false

while getopts :vf: opt; do
    case $opt in 
        f) find_out=$(find . -name "$OPTARG") 
           # do something with $find_out, such as checking if it's empty, or
           # if more than one file was found ...
           [[ $find_out ]] && filename=$(head -n 1 <<< "$find_out")
           ;;
        v) v_opt=true ;;
        ?) echo "usage: ..."; exit 1;;
    esac
done
shift $((OPTIND-1))

echo $filename
    
por 14.05.2014 / 18:06