টার্মিনালে প্রদর্শিত না হওয়া সরঞ্জামগুলির মতো এমনভাবে কীভাবে ব্যাশ স্ক্রিপ্টগুলিতে পাসওয়ার্ড পড়তে হয়?
(ফন্টকে কালো রঙে পরিবর্তন করা অনুলিপি করে সহজেই অনুলিপি করে পেস্ট করতে পারে - সুতরাং এটি সমাধান নয়)
টার্মিনালে প্রদর্শিত না হওয়া সরঞ্জামগুলির মতো এমনভাবে কীভাবে ব্যাশ স্ক্রিপ্টগুলিতে পাসওয়ার্ড পড়তে হয়?
(ফন্টকে কালো রঙে পরিবর্তন করা অনুলিপি করে সহজেই অনুলিপি করে পেস্ট করতে পারে - সুতরাং এটি সমাধান নয়)
উত্তর:
থেকে help read
:
-s do not echo input coming from a terminal
man read
, আমি চেক ইন করিনি help read
। জানা ভাল.
man bash
Silent mode. If input is coming from a terminal, characters are not echoed.
আমি সর্বদা stty -echo
প্রতিধ্বনি বন্ধ করে দিতাম, তারপরে পড়তাম এবং তারপরে করতাম stty echo
(ম্যান অফ দেখে stty
- আরও পড়ুন man stty
)। এটি প্রোগ্রামারদের দৃষ্টিভঙ্গি থেকে আরও কার্যকর কারণ আপনি প্রতিধ্বনি বন্ধ করতে পারেন এবং তারপরে জাভা, সি (++), পাইথন ইত্যাদির মতো প্রোগ্রামিং ভাষা থেকে পাসওয়ার্ড পড়তে পারেন তাদের "স্ট্যান্ডার্ড স্ট্যান্ডিন" দিয়ে।
ব্যাশে, ব্যবহারটি দেখতে এইরকম হতে পারে:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
পাইথন উদাহরণস্বরূপ:
from sys import stdout
from os import system as term
uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
raise SystemExit("Password attempt interrupted")
finally:
term("stty echo") # turn echo on again
print "username:", uname
print "password:", "*" * len(passwd)
পাইথনে আমাকে অনেক সময় এটি করতে হয়েছিল, তাই আমি এটিকে দৃষ্টিকোণ থেকে বেশ ভাল জানি। যদিও অন্য ভাষায় অনুবাদ করা খুব কঠিন নয়।
termios
,stty
,read -s
, কিছু যে এটা আছে।