केवल bash से बना पासवर्ड मैनेजर 2
नमस्ते, मैं अक्षम हूँ।
आप जानते हैं, यह सुविधाजनक .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
तंत्र यहाँ के आसपास लिखा गया है, और उसके बाद, यह मूल रूप से पहले से ही प्रस्तुत सहायक फ़ंक्शंस का उपयोग कर रहा है।
फिर मिलेंगे। धन्यवाद।