私のbashスクリプトが以下の任意のコマンドを実行したいと思います。例えば
[mysterious command] ("command1", "command2", "command3")
答え1
コマンドを配列に入れます。
cmds=( "cmd1" "cmd2" "cmd3" )
$RANDOM
${#cmds[@]}
は配列の長さで計算された乱数です(この場合は3)。$(( RANDOM % ${#cmds[@]} ))
配列の長さより小さい 0 と 1 の間の任意の数値cmds
、つまり 0、1 または 2 になります。
i=$(( RANDOM % ${#cmds[@]} ))
以下を実行すると、$cmds
インデックスに対応する文字列を選択して$i
コマンドとして実行します。
${cmds[i]}
それとも一度にすべてを行います(少し怖いようです)。
${cmds[RANDOM % ${#cmds[@]}]}
答え2
これはあなたが探しているものを達成する必要があります。
COMMANDS=("command1" "command2" "command3")
$(shuf -n1 -e "${COMMANDS[@]}")
配列を取得し、それを使用してshuf
任意のコマンドを生成します。
更新:@steeldriverに従ってshufコマンドが変更されました。