我写了一个小的bash脚本,它在文本文件中读取命令(每行一个)。 目前,脚本(如下所示)按顺序执行命令(即以与文件中输入的顺序相同的顺序)。
我想帮助修改下面的脚本,以便它将命令读入数组,然后在迭代通过随机列表之前随机化该数组(即列表)。
这是我到目前为止所做的:
while read -r -a array
do
python make_move.py "${array[@]}"
done < game_commands.dat
我在Ubuntu 10.0.4 LTS上运行bash 4.1.5
[[编辑]]
我需要执行列表中的所有命令,每个命令只执行一次。
答案 0 :(得分:4)
您可以使用shuf
命令对文件行进行随机播放。
修改:使用shuf
的代码看起来像
while read -r -a array
do
python make_move.py "${array[@]}"
done < <(shuf game_commands.dat)
答案 1 :(得分:1)
试试sort -R
。这将随机改变线条。 编辑:但是相同的行总是出现在块中......
答案 2 :(得分:1)
如果您需要在 shuf 不可用的系统上执行此类操作, ( bash 4 ,很容易适应大多数现代贝壳):
unset max s i
readarray -t _cmd < game_commands.dat
while (( max < ${#_cmd[@]} )); do
(( i = RANDOM % ${#_cmd[@]} ))
[[ $s == *,$i,* ]] || {
python make_move.py "${_cmd[i]}"
(( max++ ))
}
s+=,$i,
done