Yanıtlar:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
aslında string olarak demek istiyorsun, değil mi?
$()
bash-özgü değil, oldukça evrensel. BTW, kabuğun değişkenlerde hangi karakterleri saklayabileceğine dair kısıtlamalar yaşamadığınıza dikkat edin - örneğin, test ettiğim bash sürümü dizgiden null (\ x00) bırakıyor.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Değişmez çizgi karakterleri istiyorsanız, çizgi karakterinin tersine, dizenin sonuna gitmesi gerekir *-_
.
Ve yukarıdaki komutlardan dolayı neler yapıldığını açıklamak:
head -c 500 /dev/urandom
: İlk 500 karakteri (bayt) 'dan alın /dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Kaldır ancak tüm belirtilen karakterlerin 'a-zA-Z0-9~!@#$%^&*_-'
ilk komutunun çıkışından.fold -w 3
: İkinci komutun çıktısını, her satırda 3 karakter olacak şekilde biçimlendirin. head -n 1
: Üçüncü komut sonucunun ilk satırını açık olarak göster stdout
.fold -w 3 | head -n 1
a ile değiştirilerek daha da basitleştirilebilir head -c 3
.
Illegal byte sequence
hatayla başarısız olur . Bunu düzeltmek için "C" kodlamasını kullanın; komutu şu şekilde değiştirin:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Lütfen kontrol et man od
.
Örneğin kullanabilirsiniz
od -vAn -N4 -tu4 < /dev/urandom
işaretsiz ondalık bayt rasgele sayılar oluşturmak için.
İşte base64 dizeleri yaratan bir tane var, bunlara rağmen base64 dizeleriyle sınırlı olsalar da, dolgu malzemelerinin onlardan çıkarıldığını, bu yüzden onların kodunu çözemeyeceğinizi unutmayın, muhtemelen yine de ihtiyacınız olmayacak.
cat /dev/urandom | base64 | head -c 5
5
İstediğiniz karakter sayısı ile değiştirin .
Ancak bir nedenden dolayı onları çözmeniz base64
gerekirse, borunun sonuna gidin. Daha sonra, urandom ve base64'ten 5 karakter toplayacaktır, onu doğru dolgu ile kodlayın, ancak son dize dolgu nedeniyle istediğinizden daha uzun olabilir.
cat /dev/urandom | head -c 5 | base64
cat
, verilen miktardan çok daha fazlasını okuyacak N
ve entropiyi tüketebilir. Faydalı cevap yok.
cat
her ikisinin de kötüye kullanımı olduğu base64
ve head
savı olarak bir dosya adı alabileceği doğru olsa da , bu durumda işe yarar ve entropiyi tüketmemelidir. Bkz. Stackoverflow.com/questions/10031344/…
Bunu dene: dd if=/dev/urandom bs=1 count=3
Sonucu $ değişkenine koymak istiyorsanız:
variable=`dd if=/dev/urandom bs=1 count=3`
Muhtemelen yazdırılabilir olmayacağını unutmayın.
En kolay çözüm, aşağıdaki kadar basit olurdu:
$ head -cN /dev/urandom
$()
çalışır?