जवाबों:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.आप वास्तव में स्ट्रिंग के रूप में मतलब है, है ना?
$()बहुत सार्वभौमिक है, न कि बैश-विशिष्ट। BTW, सावधान रहें कि आप किन वर्णों में गोले को स्टोर कर सकते हैं, उन सीमाओं पर न चलें - उदाहरण के लिए, bash I के संस्करण को स्ट्रिंग से नल (\ x00) के पत्तों के साथ परीक्षण किया गया।
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(यदि आप शाब्दिक डैश अक्षर चाहते हैं, तो डैश वर्ण को स्ट्रिंग के अंत में जाना चाहिए, जैसा कि ऊपर दिया गया है *-_)।
और यह समझाने के लिए कि उपरोक्त आदेशों के कारण क्या होता है:
head -c 500 /dev/urandom: पहले 500 अक्षरों (बाइट्स) से प्राप्त करें /dev/urandom।tr -dc 'a-zA-Z0-9~!@#$%^&*_-': पहले कमांड के आउटपुट से निर्दिष्ट सभी अक्षरों को हटा दें 'a-zA-Z0-9~!@#$%^&*_-'।fold -w 3: दूसरी कमांड के आउटपुट को इस तरह से फॉर्मेट करें कि उसमें प्रति पंक्ति 3 अक्षर हों। head -n 1: तीसरे आदेश के परिणाम की पहली पंक्ति प्रदर्शित करें stdout।fold -w 3 | head -n 1एक से head -c 3नई लाइन चार अंत में की जरूरत नहीं है, तो।
Illegal byte sequenceत्रुटि के साथ विफल हो जाएगा । इसे ठीक करने के लिए, "सी" एन्कोडिंग का उपयोग करें; कमांड को बदल दें:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
कृपया जाँच करें man od।
आप उपयोग कर सकते हैं, उदाहरण के लिए
od -vAn -N4 -tu4 < /dev/urandom
अहस्ताक्षरित दशमलव 4 बाइट्स यादृच्छिक संख्या उत्पन्न करने के लिए।
यहाँ एक है जो बेस 64 स्ट्रिंग्स बनाता है, ध्यान दें कि भले ही वे बेस 64 स्ट्रिंग्स तक सीमित हैं, पैडिंग उन्हें से हटा दिया जाता है, इसलिए आप उन्हें डिकोड नहीं कर सकते हैं, आपको शायद वैसे भी इसकी आवश्यकता नहीं होगी।
cat /dev/urandom | base64 | head -c 5
5आपके द्वारा पसंद किए जाने वाले वर्णों की संख्या के साथ बदलें ।
यदि आपको हालांकि किसी कारण से उन्हें डीकोड करने की आवश्यकता है, base64तो पाइप के अंत में जाएं। इसके बाद यह 5 आयामी यूरोग्रैम से इकट्ठा करेगा और base64 इसे सही पैडिंग के साथ एन्कोड करता है, लेकिन अंतिम स्ट्रिंग पैडिंग के कारण जो आप चाहते थे उससे अधिक लंबा हो सकता है।
cat /dev/urandom | head -c 5 | base64
catएक दिए गए राशि Nचार्ट से कहीं अधिक पढ़ा जाएगा , और एन्ट्रापी को पूरा कर सकता है। उपयोगी उत्तर नहीं।
catदोनों में से एक दुरुपयोग है base64और headएक तर्क के रूप में एक फ़ाइल नाम ले सकता है, इस मामले में यह काम करता है और एन्ट्रापी को समाप्त नहीं करना चाहिए। देखें stackoverflow.com/questions/10031344/...
इसे इस्तेमाल करे: dd if=/dev/urandom bs=1 count=3
यदि आप परिणाम को $ चर में रखना चाहते हैं:
variable=`dd if=/dev/urandom bs=1 count=3`
ध्यान दें कि यह संभवतः प्रिंट करने योग्य नहीं होगा।
सबसे आसान समाधान उतना ही सरल होगा:
$ head -cN /dev/urandom
$()काम करता है ?