উত্তর:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
আপনি আসলে স্ট্রিং বলতে চান, তাই না?
$()
বেশ সার্বজনীন, বাশ-নির্দিষ্ট নয়। বিটিডাব্লু, সতর্কতা অবলম্বন করুন যে শেলটি ভেরিয়েবলগুলিতে কোন অক্ষর সংরক্ষণ করতে পারে তার সীমাবদ্ধতায় না চলে run উদাহরণস্বরূপ, বাশ সংস্করণটি আমি স্ট্রিং থেকে নালগুলি (from 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 বাইট এলোমেলো সংখ্যা তৈরি করতে।
এখানে একটি যা বেস6464 স্ট্রিংগুলি তৈরি করে, দ্রষ্টব্য যে তারা বেস64 স্ট্রিংগুলির মধ্যে সীমাবদ্ধ থাকলেও প্যাডিংগুলি তাদের থেকে সরিয়ে দেওয়া হয়, সুতরাং আপনি সেগুলি ডিকোড করতে পারবেন না, সম্ভবত আপনাকে সম্ভবত এটির প্রয়োজন হবে না।
cat /dev/urandom | base64 | head -c 5
5
আপনার পছন্দের চরগুলির সংখ্যাটি প্রতিস্থাপন করুন ।
তবে আপনাকে যদি কোনও কারণে এগুলি ডিকোড করতে হয় তবে base64
পাইপের শেষ দিকে যান move এরপরে এটি ইউরেনডম থেকে 5 টি অক্ষর সংগ্রহ করবে এবং বেস 64 এটি ডান প্যাডিং সহ এনকোড করবে, তবে প্যাডিংয়ের কারণে চূড়ান্ত স্ট্রিংটি আপনি যা চেয়েছিলেন তার চেয়ে দীর্ঘ হতে পারে be
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
$()
কাজ করে?