Script aleatório usando o bash

0

Estou tentando escrever um script aleatório, mas estou tendo alguns problemas. Em um diretório "cotações" existem alguns arquivos que eu gostaria de acessar aleatoriamente, mas toda vez que eu tento eu recebo o seguinte erro:

cat: '/home/thomas/Store/quotations/.': Is a directory

Aqui está o script:

#!/bin/bash
targetDir="/home/thomas/Store/quotations/"
files=( "$targetDir"/.* )
index="$RANDOM"
while [ "$index" -ge ${#files[@]} ]; do
    index=${RANDOM:4:4}
done
cat "${files[$index]}"

Eu gostaria de receber ajuda.

Obrigado!

    
por Thomas 09.12.2016 / 17:43

1 resposta

2

Existem dois diretórios especiais em todos os diretórios que seu curinga corresponde: . e .. . Tem certeza de que você não queria "$targetDir"/* ? Você precisaria filtrar diretórios, de qualquer maneira.

Você pode usar

[[ -d $filename ]]

para testar se o nome do arquivo é um diretório.

Além disso, a maneira usual de transformar $ RANDOM em um número no intervalo 0 - $ n, você pode usar

index=$(( RANDOM % (n + 1) ))

onde% é o operador de módulo.

Em outras palavras:

#!/bin/bash
targetDir=/home/thomas/Store/quotations
files=( "$targetDir"/* )
index=$(( RANDOM % ${#files[@]} ))
until [[ -f ${files[index]} ]] ; do 
    index=$(( RANDOM % ${#files[@]} ))
done
cat "${files[index]}"
    
por choroba 09.12.2016 / 18:05