2

我想制作一个 bash 脚本,它向标准输出发送一个只包含 ASCII 可写字符的文件图像。我的脚本应该只接收并接受一个参数,其中包含应该从中读取的八位字节数/dev/urandom

所以,我需要从/dev/urandom以创建要发送到标准输出的文件图像。

我有这个:

!/usr/bin/env bash

X=1

if [ $X -eq 0 ]; then
    echo "Error: An argument is needed"
else
    strings /dev/urandom    
    echo the result
fi

我正在检查是否有任何争论,如果有,请阅读/dev/urandom. 当然,这只是一个草图。

有人告诉我有一个名为 strings 的命令可以从任何文件中读取和提取字符序列,但我在互联网上查过,找不到太多关于它的信息。

所以我的问题是:如何从 /dev/random 读取参数中给出的八位字节数,以便我可以将它们放入标准输出(我知道如何放入标准输出:))

4

1 回答 1

7

strings is not what you want. If you just want random characters restricted to a particular set, filter out what you do not want. To get $num alphanumeric chars from /dev/urandom, you can do:

tr -dc A-Za-z0-9 < /dev/urandom | dd bs=$num count=1 2> /dev/null

or

tr -dc '[:alnum:]' < /dev/urandom ...

Note that this is not strictly portable. Although the standard for tr states that it should work on any input file, my version is throwing the error 'Illegal byte sequence'. Another option is:

perl -pe 's/[^a-zA-Z0-9]//g' /dev/urandom | dd bs=$num count=1 2> /dev/null
于 2013-10-07T12:23:46.347 回答