コマンドを変数として保存し、bashでランダムに実行する方法は?

コマンドを変数として保存し、bashでランダムに実行する方法は?

コマンドを変数として保存し、bashでランダムに実行する方法は?

command1="
   convert -size 2000x1000 xc:none -gravity center \
    -stroke yellow -pointsize 50 -font Courier-BoldOblique -strokewidth 3 -annotate +100+100 "${caption}" \
    -blur 0x25 -level 0%,50% \
    -fill white -stroke none -annotate +100+100 "${caption}" \
    in.jpeg  +swap -gravity center -geometry +0-3 \
    -composite  out.jpeg
"
command2="
   convert -size 2000x1000 xc:none -gravity center \
    -fill white -pointsize 50 -stroke none -annotate +100+100 "${caption}" -channel alpha -evaluate multiply 0.35 -trim +repage \
    in.jpeg  +swap -gravity center -geometry +0-3 \
    -composite  out.jpeg
"

私は何を試しましたか?

COMMANDS=("command1" "command2")
$(eval $(shuf -n1 -e "${COMMANDS[@]}"))

必要な出力は、2つの変換コマンドのいずれかをランダムに実行することです。必要な結果を得るにはどうすればいいですか?何が間違っていますか?

以下からヒントを得ました。

ランダムコマンドの実行

シェルスクリプトの変数にコマンドを保存する方法

助けてくれてありがとう!

ベストアンサー1

機能を使用してください。

command1(){ 
   convert -size 2000x1000 xc:none -gravity center \
    -stroke yellow -pointsize 50 -font Courier-BoldOblique -strokewidth 3 -annotate +100+100 "${caption}" \
    -blur 0x25 -level 0%,50% \
    -fill white -stroke none -annotate +100+100 "${caption}" \
    in.jpeg  +swap -gravity center -geometry +0-3 \
    -composite  out.jpeg
}

command2() {
   convert -size 2000x1000 xc:none -gravity center \
    -fill white -pointsize 50 -stroke none -annotate +100+100 "${caption}" -channel alpha -evaluate multiply 0.35 -trim +repage \
    in.jpeg  +swap -gravity center -geometry +0-3 \
    -composite  out.jpeg
}

理由を調べるコマンドを実行しようとすると変数が失敗する理由

おすすめ記事