从/ dev / urandom获取特定数量的char?

时间:2015-01-06 12:48:45

标签: bash osx-yosemite

我试图超越"缺乏" OS X上一个好的终端工具来生成密码。 这个脚本是各种来源的混合,已经从我这边做过调试(herehereherehere too

pass=`LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | head -c 32`
echo $pass

我选择使用head -c 32方法而不是fold -w 32方法,因为在阅读相应的手册页后,我觉得头部更清晰,因为当我使用fold时,脚本只是&#34;挂起&#34; (永远不要停止加载)。 我确实清楚地知道head的-c标志是用于多个字节而不是字符,这就是为什么我的密码有时超过32个字符。

问题是,有没有办法取代头部有32个字符? (我会接受使用折叠,当然,如果你解释我为什么它不起作用,并重新使用折叠-w,所以我可以理解它比来自男人的描述更清楚。)

有问题的退货示例:

^[[A]S9,Bx8>c:fG)xB??<msm^Ot|?C()bd] # 36 characters, sadly 

1 个答案:

答案 0 :(得分:2)

一种选择就是一起使用foldhead

pass=$(LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | fold -w 32 | head -n 1)

fold保持行长度为32个字符,而head在捕获第一行后退出。我已经将你的反引号更新为更现代的$( )语法作为奖励。

fold -w 32将在每32个输入字符后在输出中插入换行符。只要继续有任何输入,它将继续产生输出。 head -n 1将在一行之后退出(使用换行符,关闭管道并导致所有命令终止。