コマンドライン引数をランダムに選択する #2

いわたさんから、echo "foo bar baz" | cut -f `jot -r 1 1 3` -d " "という方法を教えてもらいましたが、実は微妙に要件を満していないです。id:ha-tan:20050314の説明がはしょりすぎですね。すみません…‥ 実は、以下の要件もあります。

  • コマンドライン引数の個数を不定にしたい。
  • findコマンドと連携したい。ruby -e 'puts ARGV[rand(ARGV.size)]' `find /path/to/wallpapers -type f`みたいに(cutでも-dを変えればいけるのかな)。

でもいわたさんの例を見て、findの結果をコマンドライン引数で渡すのはダメだと思った。コマンドライン引数の長さ制限があるので危険すぎる。標準入力で渡して、

$ find /path/to/wallpapers -type f | ruby -e 'ary = ARGF.readlines; print ary[rand(ary.size)]'

とか

$ echo foo bar baz | ruby -e 'ary = ARGF.read.split(/\s+/); puts ary[rand(ary.size)]'

という感じにした方がまだマシだと思う(この場合もメモリが足りないーとか問題はある)。
いわたさん、コメントどうもありがとうございました。