随机播放 BASH 中的随机命令列表?

Shuffle random list of COMMANDS in BASH?

我在名为 commands.txt:

的文本文件中有一个命令列表
cat file1.txt | sort > file1.txt
cat file2.txt | sort > file2.txt
etc

我想做的是随机化该文件,然后以随机顺序执行每一行。我在 cmd.sh shell 脚本中尝试了以下内容:

while read -r -a array
do
    "${array[@]}"
done < <(shuf commands.txt)

而 Bash 所做的一切就是对我大喊大叫,这是一个带有意外标记的语法错误 <

这是在 MacOS 10.14 上运行 bash 3.2.57 和 zsh 5.8。

有人知道怎么做吗?

管道 (|) 和重定向 (>) 在变量中不起作用。您可以使用 eval "${array[@]}"bash -c "${array[*]}"

此外,如果您执行 cat file > filefile 将在执行 cat 之前被截断(清空)。所以你只有空文件。你可以做 sort file1.txt > tmp && mv tmp file1.txt

您可以将随机化的命令通过管道传输到 bash,无需任何处理:

shuf commands.txt | bash