如何随机化列表并遍历随机列表(bash)

我写了一个bash脚本,在文本文件中读取命令(每行一个)。 目前,脚本(如下所示)正在按顺序执行命令(即按与文件中input的顺序相同的顺序)。

我想帮助修改下面的脚本,以便将命令读入数组,然后在迭代通过随机列表之前随机化该数组(即列表)。

这是我迄今为止:

while read -r -a array do python make_move.py "${array[@]}" done < game_commands.dat 

我在Ubuntu 10.0.4 LTS上运行bash 4.1.5

[[编辑]]

我需要执行列表中的所有命令,每个命令只执行一次。

您可以使用shuf命令来洗牌文件的行。

编辑 :你的代码使用shuf会看起来

 while read -r -a array do python make_move.py "${array[@]}" done < <(shuf game_commands.dat) 

尝试sort -R 。 这将随机洗牌。 编辑:但是相同的行将永远出现在块…

如果你需要在shuf不可用的系统上执行这样的操作,(仅适用于bash 4 ,适用于大多数现代shell):

 unset max si 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