POSIX- अनुरूप शेल में पासवर्ड के लिए पूछें?


17

जब मैं किसी bashस्क्रिप्ट में पासवर्ड मांगना चाहता हूं , तो मैं यह करता हूं:

read -s

... लेकिन जब मैं bashPOSIX मोड में चलता हूं sh, तो -sविकल्प अस्वीकार कर दिया जाता है:

$ read -s
sh: 1: read: Illegal option -s

मैं सुरक्षित रूप से POSIX- आज्ञा कमांड के साथ इनपुट कैसे मांग सकता हूं?


1
एसओ पर इस उत्तर में एक संभव तरीके बताए गए हैं: stackoverflow.com/a/28393320/3691891
अर्कादिअस ड्राज्स्की

जवाबों:


24
read_password() {
  REPLY="$(
    # always read from the tty even when redirected:
    exec < /dev/tty || exit # || exit only needed for bash

    # save current tty settings:
    tty_settings=$(stty -g) || exit

    # schedule restore of the settings on exit of that subshell
    # or on receiving SIGINT or SIGTERM:
    trap 'stty "$tty_settings"' EXIT INT TERM

    # disable terminal local echo
    stty -echo || exit

    # prompt on tty
    printf "Password: " > /dev/tty

    # read password as one line, record exit status
    IFS= read -r password; ret=$?

    # display a newline to visually acknowledge the entered password
    echo > /dev/tty

    # return the password for $REPLY
    printf '%s\n' "$password"
    exit "$ret"
  )"
}

ध्यान दें कि उन गोले (mksh) के लिए जहां बिल्ट printfनहीं है, पासवर्ड psआउटपुट में स्पष्ट रूप से दिखाई देगा (कुछ माइक्रोसेकंड के लिए) या कुछ ऑडिट लॉग में दिखाई दे सकता है यदि सभी कमांड चालान उनके मापदंडों के साथ ऑडिट किए जाते हैं।


2
हो सकता है cat+ heredoc एक सुरक्षित विकल्प हो printf?
जॉन कुगेलमैन

1
@JohnKugelman यहाँ डॉक्स को अधिकांश शेल में अस्थायी फ़ाइलों के रूप में लिखा जाता है जबकि प्रिंटफ़ को अधिकांश शेल में बनाया जाता है। मुझे यकीन नहीं है कि कौन सबसे अच्छा है।
स्टीफन चेज़लस


पुरानी sttyसेटिंग्स को सहेजने और पुनर्स्थापित करने का तरीका दिखाने के लिए धन्यवाद ।
बमर

20

read -sPOSIX में नहीं है। यदि आप POSIX- अनुरूप होना चाहते हैं तो उपयोग करें stty -echosttyऔर इसके echoपैरामीटर को POSIX में परिभाषित किया गया है।

#!/bin/bash
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"

यह उन सभी गोले पर काम करेगा जो POSIX के अनुरूप हैं।

स्रोत


7
@ आर्कादिउज़-drabczyk की टिप्पणी में जवाब से एक बिंदु को उजागर करना है, यह जाल करने के लिए एक अच्छा विचार होगा सभी संकेतों आप चालू करने के लिए में कर सकते हैं stty echoपर वापस - मामले में उपयोगकर्ता भ्रमित हो जाता है और हिट दौरान को नियंत्रित-सी read PASSWORDअनुभाग ।
जेफ स्कालर

लिंक किए गए इस सवाल का जवाब पढ़ने के लिए या इस सूत्र में स्टीफ़न का जवाब देखने के
जेफ स्कालर

आपको बिना शर्त गूंजना नहीं चाहिए, आपको पुरानी सेटिंग को सहेजना और पुनर्स्थापित करना चाहिए। कई लोग Emacs शेल बफ़र्स में काम करते हैं, और यह आम तौर पर गूंज अक्षम है क्योंकि Emacs ही गूंज कर रहा है। अन्य उत्तर दिखाता है कि यह कैसे करना है।
बमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.