केवल bash से बना पासवर्ड मैनेजर 2

6 min

language: ja bn en es hi pt ru zh-cn zh-tw

नमस्ते, मैं अक्षम हूँ।
आप जानते हैं, यह सुविधाजनक .bashrc है ना?

_ssh_hosts() {
  local cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $(compgen -W "$(awk '{print $1}' ~/.ssh/known_hosts | cut -d, -f1 | sort -u)" -- "$cur") )
}
complete -F _ssh_hosts ssh

(पहले कहीं मिला और कॉपी कर लिया)

तो, मैंने सोचा कि bash का यह सुविधाजनक बिल्ट-इन कमांड बहुत उपयोगी है! और मैंने इसे अपने बनाए हुए पासवर्ड मैनेजर में शामिल करके बनाने की कोशिश की।
पासवर्ड मैनेजर बनाना चाहने से ज़्यादा, मैं बस complete का उपयोग करना चाहता था।
GitHub - haturatu/ppbash: केवल bash से बना मेरा अपना पासवर्ड जनरेशन और मैनेजर

स्पष्टीकरण

_usage

यह एक आंतरिक फ़ंक्शन है जो कोई तर्क न दिए जाने पर एक सहायक फ़ंक्शन के रूप में कार्य करता है। मैंने इसे केवल इसलिए बनाया है ताकि पासवर्ड जनरेशन कमांड की संख्या बढ़ने पर भी इसे बार-बार इस्तेमाल किया जा सके।

_usage() {
  local pass_func="$1"
  local phrase="$2"
  local filename="$3"

  if [[ -z "$filename" ]]; then
    echo "Usage: $pass_func <filename> <phrase>"
    echo
    echo "स्पष्टीकरण:"
    echo "  $pass_func निर्दिष्ट <phrase> से पासवर्ड उत्पन्न करता है,"
    echo "  और इसे ~/.${pass_func}/ में <filename> नाम से एन्क्रिप्ट करके सहेजता है।"
    echo
    echo "तर्क:"
    echo "  <filename> : सहेजने/पढ़ने के लिए उपयोग किया जाने वाला पहचान नाम (फ़ाइल नाम)"
    echo "  <phrase>   : मूल वाक्यांश (यदि इसमें रिक्त स्थान हों तो उद्धरण चिह्नों में संलग्न करें)"
    echo
    echo "उपयोग उदाहरण:"
    echo "  $pass_func mymail 'Like a rolling stone'"
    echo
    echo "पुनः उपयोग:"
    echo "  यदि पहले से सहेजे गए <filename> को निर्दिष्ट किया जाता है, तो वह पासवर्ड फिर से प्रदर्शित होता है।"
    echo
    echo "स्वयं-पूर्ण:"
    echo "  ${pass_func} <Tab> दबाने पर सहेजे गए फ़ाइल नाम स्वयं-पूर्ण हो जाते हैं।"
    echo
    echo "संबंधित कमांड:"
    echo "  ppmenu  : पंजीकृत पासवर्ड निर्देशिकाओं को सूचीबद्ध करता है।"
    echo
    return 1
  fi

  return 0
}

_init_pass_dir

मैंने सोचा कि क्या इसे विशेष रूप से लिखने की आवश्यकता है, लेकिन यह अनावश्यक होगा, इसलिए मैंने यह सहायक फ़ंक्शन भी बनाया।

_init_pass_dir() {
  local dir=$1
  if [[ ! -d $dir ]]; then
    mkdir -p $dir
  fi
}

_pass_list

complete को पास की जाने वाली पूर्णता फ़ाइलें एक ऐरे में संग्रहीत की जाती हैं।
printf "%s " "${passfiles[@]##*/}" पूर्ण पथ ऐरे से केवल फ़ाइल नामों को सूचीबद्ध करता है।
यह awk जैसा है, लेकिन उदाहरण के लिए, यदि यह /uoo/ooo/genki है, तो यह केवल genki होगा।

_pass_list() {
  local dir="$1"
  local passfiles=()

  if [[ -d "$dir" ]]; then
    passfiles=("$dir"/*)
    printf "%s " "${passfiles[@]##*/}"
  fi
}

_register_func_dir

यह थोड़ा जटिल है, इसलिए शायद मुझे फ़ंक्शन का नाम ठीक करना चाहिए...

फ़ंक्शंस को एक ऐरे में संग्रहीत किया जाता है।
declare -F bash में परिभाषित उन फ़ंक्शंस को निकालता है जो pb से शुरू होते हैं।
उन्हें PASS_DIRS ऐरे में संग्रहीत किया जाता है।

उसके बाद, complete -W स्पेस-सेपरेटेड शब्दों को $fn फ़ंक्शन दर्ज करने पर स्वयं-पूर्ण होने की अनुमति देता है।

_register_func_dir() {
  while read -r fn _; do
    local dir="$HOME/.$fn"
    PASS_DIRS+=("$dir")

    complete -W "$(_pass_list "$dir")" "$fn"
  done < <(declare -F | awk '{print $3}' | grep '^pb')
}

मुझे लगता है कि complete -F, complete -W से अधिक बहुमुखी है।
ऐसा इसलिए है क्योंकि यह एक फ़ंक्शन को निष्पादित करके पूर्ण करते समय गतिशील रूप से उत्पन्न होता है।
-W स्थिर मानों से पूर्ण होता है, लेकिन शुरुआत में मौजूद ssh के स्वयं-पूर्ण के लिए,

_ssh_hosts() {
  local cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $(compgen -W "$(awk '{print $1}' ~/.ssh/known_hosts | cut -d, -f1 | sort -u)" -- "$cur") )
}
complete -F _ssh_hosts ssh

यदि आप ssh के बाद Tab दबाते हैं, तो _ssh_hosts निष्पादित होगा।
मेरा भविष्य का स्वयं शायद इसे बाद में complete -F के साथ स्वयं-पूर्ण करने योग्य बना देगा...

बाकी पासवर्ड जनरेशन फ़ंक्शंस बहुत दिलचस्प नहीं हैं, इसलिए यहीं तक।
【अजीब】 .bashrc से ही बनाया जा सकने वाला पासवर्ड मैनेजर - SOULMINIGRIG
तंत्र यहाँ के आसपास लिखा गया है, और उसके बाद, यह मूल रूप से पहले से ही प्रस्तुत सहायक फ़ंक्शंस का उपयोग कर रहा है।
फिर मिलेंगे। धन्यवाद।

Related Posts