どうも、自宅警備員です。
コマンドラインからささっと乱数を生成したいときにべんりかもしれないシェル函数と Ruby のワンライナーを書いたので宣伝しませう*1。シェルは Bourne shell っぽいやつなら sh
でも bash
でも dash
でも ash
でも、そして zsh
でも大丈夫ですね。
使ひ方は、一番お手軽には $HOME/.bashrc
とか $HOME/.zshrc
の最後の方に書き足してやるのが良いですね。ほんとは .
/ source
コマンドで読み込んでみるのが良い気がします。
rand
えっと、一往ここにもコード載せますが、 Gist の方が最新である可能性が高いですね。
要するに Ruby の SecureRandom
を叩いてるだけなので、Ruby のドキュメントとシェルスクリプト本文を読むのがてっとりばやい気がします!
rand () { a=$1 b=$2 type=random_string len=10 post="cat -" chop="sed -e s/.$//g" case `echo $a | tr '[:upper:]' '[:lower:]'` in "") a=$type; b=$len ;; ba*) a=base64 ;; f*) a=random_float ;; h*) a=hex ;; b*) a=random_bytes ;; u*) a=uuid ;; s*) a=random_string ;; n*) a=random_number ;; esac if test "$a" = uuid then type=uuid; len='' elif test "$a" = random_float then type=random_number; len=0 elif test "$a" = random_string -o "$b" = "" then type=hex test ! "$b" && l=$a if test "$b" -gt 0 2>/dev/null then l=$b fi len=`expr $l / 2` mod=`expr $l % 2` if test "$l" = 1 then post="$chop"; len=1 elif test $mod = 1 then post="$chop"; len=`expr $len + 1` fi elif test "$a" -a "$b" then type=$a; len=$b elif test "$a" then len=$a fi ruby -rsecurerandom -e "puts SecureRandom.${type} ${len}" | eval $post }
どうせ一回は ruby
を起動するんだから全部 Ruby で書きゃ良かったんじゃないかって気もなきにしもあらずなのですが、単純なものならシェルスクリプトもお手軽に書けて大好きです。
rand
とだけ叩いてやれば10文字のそれっぽい文字列が出てきますし、 rand 20
と叩いてやれば20文字で出てきます。 rand float
とか rand f
とか書いてやれば、1未満の浮動小数点数が出てきます。 rand byte 10
とかやると10バイトのバイト列が出てきます! その他はコード読んでください!
*1:ただし最後にアップデートしたのは21日前…