从/dev/urandom中获取特定数量的字符?
Get a specific number of char from /dev/urandom?
我正试图克服 OS X 上“缺乏”一个好的终端工具来生成密码的问题。
这个脚本是来自各种来源的混合,并且已经从我这边完成调试 (here, here, here and here too)
pass=`LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | head -c 32`
echo $pass
我选择了 head -c 32
方法而不是 fold -w 32
方法,因为在阅读了相应的手册页后 head 对我来说似乎更清楚了,而且因为当我使用 fold 时,脚本只是“挂起” "(永远不要停止加载)。
我确实清楚地知道 head 的 -c 标志是针对多个字节而不是字符,这就是为什么有时我的结果密码中有超过 32 个字符的原因。
问题是,有没有办法将 head 替换为 32 个字符? (我会接受使用 fold,当然,如果你向我解释为什么它不起作用并改写 fold -w 的用法,这样我就可以比男人的描述更清楚地理解它)。
有问题的例子 return :
^[[A]S9,Bx8>c:fG)xB??<msm^Ot|?C()bd] # 36 characters, sadly
一个选择就是同时使用 fold
和 head
:
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
将在一行后退出(使用换行符,关闭管道并导致所有命令终止。
也许使用 dd:
echo "$(LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | dd count=1 bs=32 status=none )"
在Linux上,tr -d '\n'
好像没用,那个人说
[:graph:]
all printable characters, not including space
但我不知道 OSX 的 tr 是否具有相同的行为
我正试图克服 OS X 上“缺乏”一个好的终端工具来生成密码的问题。 这个脚本是来自各种来源的混合,并且已经从我这边完成调试 (here, here, here and here too)
pass=`LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | head -c 32`
echo $pass
我选择了 head -c 32
方法而不是 fold -w 32
方法,因为在阅读了相应的手册页后 head 对我来说似乎更清楚了,而且因为当我使用 fold 时,脚本只是“挂起” "(永远不要停止加载)。
我确实清楚地知道 head 的 -c 标志是针对多个字节而不是字符,这就是为什么有时我的结果密码中有超过 32 个字符的原因。
问题是,有没有办法将 head 替换为 32 个字符? (我会接受使用 fold,当然,如果你向我解释为什么它不起作用并改写 fold -w 的用法,这样我就可以比男人的描述更清楚地理解它)。
有问题的例子 return :
^[[A]S9,Bx8>c:fG)xB??<msm^Ot|?C()bd] # 36 characters, sadly
一个选择就是同时使用 fold
和 head
:
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
将在一行后退出(使用换行符,关闭管道并导致所有命令终止。
也许使用 dd:
echo "$(LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d '\n' | dd count=1 bs=32 status=none )"
在Linux上,tr -d '\n'
好像没用,那个人说
[:graph:] all printable characters, not including space
但我不知道 OSX 的 tr 是否具有相同的行为