Случайный сценарий с помощью удара

Я пытаюсь записать случайный удар сценария, но у меня есть некоторые проблемы. В каталоге "цитаты" существуют некоторые файлы, к которым я хотел бы получить доступ случайным образом, но каждый раз я пробую его, я получаю следующую ошибку:

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

Вот сценарий:

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

Я ценил бы некоторую справку.

Спасибо!

0
задан 9 December 2016 в 21:16

1 ответ

Существует два специальных каталога в каждом каталоге, которому соответствует Ваш подстановочный знак: . и ... Вы уверены, что не хотели "$targetDir"/* вместо этого? Необходимо было бы отфильтровать каталоги, так или иначе.

можно использовать

[[ -d $filename ]]

, чтобы протестировать, является ли имя файла каталогом.

кроме того, обычный способ превратить $RANDOM в число в интервале 0 - $n, можно использовать

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

, где % является оператором модуля.

, Другими словами:

#!/bin/bash
targetDir=/home/thomas/Store/quotations
files=( "$targetDir"/* )
index=$(( RANDOM % ${#files[@]} ))
until [[ -f ${files[index]} ]] ; do 
    index=$(( RANDOM % ${#files[@]} ))
done
cat "${files[index]}"
2
ответ дан 28 September 2019 в 01:28

Другие вопросы по тегам:

Похожие вопросы: