我写了一个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