শুধুমাত্র ব্যাশ দিয়ে তৈরি পাসওয়ার্ড ম্যানেজার ২

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: শুধুমাত্র ব্যাশ দিয়ে তৈরি আমার নিজস্ব পাসওয়ার্ড জেনারেশন ও ম্যানেজার

ব্যাখ্যা

_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 ব্যবহার করে, ব্যাশে সংজ্ঞায়িত ফাংশনগুলি থেকে 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