bash 别名用于在多个命令中随机运行命令

bash 别名用于在多个命令中随机运行命令

我需要帮助弄清楚如何运行 bash 别名或函数来随机选择另一个命令或别名并运行它。

命令和别名以及函数别名的列表是预先已知的。列表的大小也是已知的。

我有多种不同的 ASCII 艺术版本存储在别名中。

例如 ascii-art-colorless-clear ascii-art-colorless-bg ascii-art-colored-clear ascii-art-colored-bg

我不想输入整个别名,我只想输入 ascii-art 并随机选择其中一个别名。

在这种情况下,每个别名只是一个简单的 echo 命令

编辑:在帮助下找到答案吉尔·奎诺。所需的函数是 select-random-arguement-to-run() { $(shuf -e "$@" -n 1) }

这将选择一个随机别名并运行它

alias ascii-art="select-random-arguement-to-run "ascii-art-colorless-clear" "ascii-art-colorless-bg" "ascii-art-colored-clear" "ascii-art-colored-bg""

这需要前面定义的 select-random-arguement-to-run 函数位于我的 bashrc 文件中。

答案1

我会用什么做工具:

$ cat commands.list
rcp
scp
ssh

代码:

$ shuf commands.list | head -n1
ssh # random command

定义一个函数:

$ myfunc(){ shuf commands.list | head -n1; }

调用该函数:

$ myfunc

答案2

以 Gilles Quenot 所说的为基础(吉勒·奎诺的回答)

这是在我的 bash 别名/函数中有效的答案

run-random-command() {
    $(shuf -e "$@" -n 1)
}

运行 $(run-random-command "echo hi" "echo bye" "ls") 将打印 bye 或 hi 到终端或运行 ls ,相当于

$(shuf -e "echo hi" "echo bye" "ls" -n 1)

如您所知,shuf 返回代码的文本,因此 $() 用于运行 shuf 返回的文本。

相关内容