我正在尝试编写一个随机脚本 bash,但遇到了一些问题。在目录“quotations”中有一些我想随机访问的文件,但每次尝试时都会出现以下错误:
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]}"
我将非常感激您的帮助。
谢谢 !
答案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]}"