यह ओपी द्वारा पूछे जाने की तुलना में अधिक है, लेकिन चूंकि यह सुरक्षित रूप से पासवर्ड पारित करने के लिए एक शीर्ष परिणाम है curl, मैं इन समाधानों को उन अन्य लोगों के लिए यहां जोड़ रहा हूं जो यहां खोज रहे हैं।
नोट: कमांड के -sलिए arg readPOSIX नहीं है, और इसलिए यह हर जगह उपलब्ध नहीं है, इसलिए इसका उपयोग नीचे नहीं किया जाएगा। हम उपयोग करेंगे stty -echoऔर stty echoइसके बजाय।
ध्यान दें: नीचे दिए गए सभी बैश वैरिएबल को स्थानीय लोगों के रूप में घोषित किया जा सकता है यदि किसी फ़ंक्शन में, परेशान करने के बजाय।
ध्यान दें: perl बहुत आम तौर पर सभी प्रणालियों पर उपलब्ध है जो मैंने कोशिश की है क्योंकि यह कई चीजों के लिए एक निर्भरता है, जबकि rubyऔर pythonइसलिए, यहां उपयोग नहीं कर perlरहे हैं। यदि आप गारंटी दे सकते हैं ruby/ pythonजहां आप ऐसा कर रहे हैं, तो आप perlकमांड को उनके समकक्ष से बदल सकते हैं ।
नोट: bashmacOS 10.14.4 पर 3.2.57 में परीक्षण किया गया। अन्य गोले / संस्थापन के लिए कुछ छोटे अनुवाद की आवश्यकता हो सकती है।
कर्ल को पास करने के लिए एक (पुन: प्रयोज्य) पासवर्ड के लिए उपयोगकर्ता को सुरक्षित रूप से संकेत दें। विशेष रूप से उपयोगी है अगर आपको कर्ल को कई बार कॉल करने की आवश्यकता है।
आधुनिक गोले के लिए, जहां echo एक अंतर्निर्मित (चेक के माध्यम से which echo):
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
echo ${pass} | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
unset username
unset pass
पुराने गोले के लिए, जहां echoकुछ ऐसा है /bin/echo(जहां यह प्रक्रिया सूची में जो कुछ भी इको देखा जा सकता है):
यह संस्करण रद्द नहीं किया जा सकता है , इसके बजाय नीचे देखें।
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
perl -e '
my $val=<STDIN>;
chomp $val;
print STDERR "\n"; # we need to move the line ahead, but not send a newline down the pipe
print $val;
' | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
stty echo # re-enable echoing user input
unset username
यदि आपको पासवर्ड को अस्थायी रूप से किसी फ़ाइल में संग्रहीत करने की आवश्यकता होती है, तो इसे साफ़ करने से पहले कई आदेशों के लिए इसे फिर से उपयोग करने के लिए कहें (क्योंकि आप कोड पुन: उपयोग के लिए फ़ंक्शन का उपयोग कर रहे हैं और कोड को दोहराना नहीं चाहते हैं और नहीं कर सकते हैं इको के माध्यम से मूल्य पास करें)। (हाँ, ये इस रूप में देखने में थोड़े वंचित हैं कि अलग-अलग पुस्तकालयों में कार्य नहीं हो रहे हैं; मैंने इसे दिखाने के लिए आवश्यक न्यूनतम कोड तक उन्हें कम करने की कोशिश की।)
जब इको बिल्ट-इन होता है (यह विशेष रूप से वंचित होता है, क्योंकि इको एक अंतर्निहित है, लेकिन पूर्णता के लिए प्रदान किया गया है):
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
echo "${pass}" > "${filepath}"
unset pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username
जब प्रतिध्वनि कुछ इस तरह होती है /bin/echo:
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
$(perl -e '
my $val=<STDIN>;
chomp $val;
open(my $fh, ">", $ARGV[0]) or die "Could not open file \"$ARGV[0]\" $\!";
print $fh $val;
close $fh;
' "$filepath")
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username