POSIX- অনুগত শেল একটি পাসওয়ার্ড জিজ্ঞাসা করুন?


17

আমি যখন কোনও bashস্ক্রিপ্টে একটি পাসওয়ার্ড চাইতে চাই , আমি তা করি:

read -s

... তবে যখন আমি bashপসিক্স মোডে চলে তখন sh, -sবিকল্পটি প্রত্যাখ্যান করা হয়:

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

আমি কীভাবে কোনও পসিক্স-অনুবর্তী কমান্ড দিয়ে নিরাপদে একটি ইনপুট চাইতে পারি?


1
একটি সম্ভাব্য উপায় ইত্যাদি এই উত্তর বর্ণিত হয়: stackoverflow.com/a/28393320/3691891
Arkadiusz Drabczyk

উত্তর:


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+ হেরডোক এর নিরাপদ বিকল্প হতে পারে printf?
জন কুগেলম্যান

1
@ জনকুগেলম্যান এখানে ডক্স বেশিরভাগ শেলগুলিতে অস্থায়ী ফাইল হিসাবে লেখা হয় যখন বেশিরভাগ শেলগুলিতে প্রিন্টফ নির্মিত হয়। আমি নিশ্চিত না কোনটি সবচেয়ে ভাল।
স্টাফেন চেজেলাস


পুরানো sttyসেটিংস কীভাবে সংরক্ষণ এবং পুনরুদ্ধার করবেন তা দেখানোর জন্য ধন্যবাদ ।
বার্মার

20

read -sপসিক্সে নেই। আপনি যদি পসিক্স-কমপ্লায়েন্ট হতে চান তবে এটি ব্যবহার করুন stty -echosttyএবং এর echoপরামিতি POSIX এ সংজ্ঞায়িত করা হয়েছে।

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

এটি পসিক্সের সাথে সঙ্গতিপূর্ণ সমস্ত শেলগুলিতে কাজ করবে।

সূত্র


7
@ আরকাদিউস-ড্র্যাবকিজিকের মন্তব্যে উত্তর থেকে একটি বিষয় হাইলাইট করতে, stty echoআবার চালু করার জন্য আপনি যে সমস্ত সিগন্যালগুলি আটকে রাখতে পারেন তা আটকাতে ভাল ধারণা হবে - যদি read PASSWORDবিভাগটি চলাকালীন ব্যবহারকারী বিভ্রান্ত হয় এবং নিয়ন্ত্রণ-সিতে আঘাত করে তবে ।
জেফ শ্যাচলার

লিঙ্কিত উত্তরটি পড়ুন বা এই থ্রেডে স্টিফেনের উত্তরটি দেখুন
জেফ শ্যাচলার

আপনার শর্তহীন প্রতিধ্বনি চালু করা উচিত নয়, আপনার পুরানো সেটিংটি সংরক্ষণ এবং পুনরুদ্ধার করা উচিত। অনেক লোক ইম্যাক্স শেল বাফারগুলিতে কাজ করে এবং এটি সাধারণত প্রতিধ্বনিত করতে অক্ষম হয় কারণ ইম্যাকস নিজেই প্রতিধ্বনি করছে। অন্য উত্তরটি কীভাবে এটি করতে হয় তা দেখায়।
বার্মার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.