Я пытаюсь записать случайный удар сценария, но у меня есть некоторые проблемы. В каталоге "цитаты" существуют некоторые файлы, к которым я хотел бы получить доступ случайным образом, но каждый раз я пробую его, я получаю следующую ошибку:
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]}"
Я ценил бы некоторую справку.
Спасибо!
Существует два специальных каталога в каждом каталоге, которому соответствует Ваш подстановочный знак: .
и ..
. Вы уверены, что не хотели "$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]}"