我需要帮助弄清楚如何运行 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 返回的文本。