2

書き込み可能な ASCII 文字のみを含むファイル イメージを stdout に送信する bash スクリプトを作成したいと考えています。私のスクリプトは、から読み取る必要があるオクテットの数を含む 1 つの引数のみを受け取り、受け入れる必要があります/dev/urandom

/dev/urandomそのため、stdout に送信するファイル イメージを作成するには、指定された数のオクテットを読み取る必要があります。

私はこれを持っています:

!/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. もちろん、これは単なるスケッチです。

任意のファイルから一連の文字を読み取って抽出する文字列と呼ばれるコマンドがあると言われましたが、インターネットで確認しましたが、それに関する情報はあまり見つかりません。

だから私の質問は次のとおりです: /dev/random から引数で指定されたオクテットの数を読み取って、標準出力に入れることができるようにするにはどうすればよいですか (標準出力に入れる方法を知っています:))

4

1 に答える 1

7

stringsあなたが望むものではありません。ランダムな文字を特定のセットに制限したいだけの場合は、不要なものを除外します。から $num 文字の英数字を取得するには/dev/urandom、次のようにします。

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

また

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

これは厳密には移植可能ではないことに注意してください。の標準でtrは、どの入力ファイルでも機能するはずですが、私のバージョンでは「不正なバイト シーケンス」というエラーがスローされます。別のオプションは次のとおりです。

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