সিডি আর্গুমেন্ট কে কীভাবে সংবেদনশীল করবেন?


9

কখনও কখনও বিভিন্ন ডিরেক্টরি অ্যাক্সেস করার সময় এটি বেশিরভাগ সময় ঘটে থাকে যে আমি আমাদের লিনাক্স সিস্টেমের অধীনে ডিরেক্টরিগুলির নাম বা কমপক্ষে কিছু অংশ মনে করি। তবে কিছু ডিরেক্টরিতে প্রথম অক্ষর ক্যাপ বা নামের বড় হাতের অক্ষরের মধ্যবর্তী একটি অক্ষর দিয়ে শুরু করা হয়।

যে কেউ পরামর্শ দিতে পারে কীভাবে আমি cdকমান্ড কেস ইনসেনসিটিভের পরে নিম্নলিখিত যুক্তিগুলি তৈরি করতে পারি , যেমন যদি আমি সম্পাদন করি cd BackupDirectoryবা cd backupdirectoryএটি ডিরেক্টরি নাম ব্যাকআপডাইরেক্টরি প্রবেশ করতে পারে।

অবশ্যই আমি অন্যান্য ব্যবহারকারীর জন্য জিনিসগুলি স্ক্রু করতে চাই না তাই উপরেরটি যদি সম্ভব হয় তবে এই সম্ভাবনাটিও কি সম্ভব যে আমি যে সেশনটি ব্যবহার করছি সেটিতেই এই পরিবর্তনটি প্রয়োগ করা যেতে পারে এবং অন্যান্য ব্যবহারকারীর উপর প্রভাব ফেলবে না?

ঠিক আছে, আমি চেষ্টা করেছি set completion-ignore-caseকিন্তু এটি কাজ করে না। এটি কেবল এতেই সহায়তা করে যদি আমি টাইপ করি cd bএবং Tabবা Esc Escএটি ক্ষেত্রে ডিরেক্টরিটি উপেক্ষা করে ডিরেক্টরিটির নাম পূরণ করে। তবে, আমার যা দরকার তা হ'ল আমি যদি এটি করি তবে cd backupdirectoryএটি কেবল মামলাটিকে উপেক্ষা করবে এবং BackupDirectoryনিজে থেকেই প্রবেশ করবে ।


কীভাবে আপনি অস্পষ্টতা এড়াবেন? আপনি যদি backUPএবং backUp, কিভাবে হবে backupকোন কোন ডাইরেক্টরি আপনার যেতে চাও?
বার্নহার্ড

আপনি কোন শেল ব্যবহার করছেন?
গার্ট ভ্যান ডেন বার্গ

আপনি কি কোনও সরঞ্জাম ব্যবহার mcবা জিইউআইতে স্যুইচ করার কথা বিবেচনা করেছেন ? জীবনকে অনেক সহজ করে তোলে।
অট--

উত্তর:


17

সক্ষম cdspellকরা সহায়তা করবে:

shopt -s cdspell

manপৃষ্ঠা থেকে :

সিডিস্পেল যদি সেট করা থাকে তবে সিডি কমান্ডের ডিরেক্টরি উপাদানগুলির বানানে ছোট ছোট ত্রুটিগুলি সংশোধন করা হবে। ত্রুটিগুলি যাচাই করা হয়েছে তা হ'ল ট্রান্সপোসড অক্ষর, একটি মিস মিস চরিত্র এবং একটি অক্ষর অনেক বেশি। একটি সংশোধন পাওয়া গেলে, সংশোধন করা ফাইলটির নাম মুদ্রিত হয় এবং কমান্ডটি এগিয়ে যায়। এই বিকল্পটি কেবল ইন্টারেক্টিভ শেল দ্বারা ব্যবহৃত হয়।


পরিবর্তনটি কার্যকর হওয়ার জন্য এই আদেশটি চালানোর পরে আপনার কি কিছু করতে হবে?
নাথন আর্থার

আমি তাই অনুমান করা হবে কারণ কেবল shopt -s cdspell আমার জন্য কিছু করছেন না হয় লিখে
sdfsdf

10

সজোরে আঘাত

set completion-ignore-case onইন ~/.inputrc(বা bind 'set completion-ignore-case on'মধ্যে ~/.bashrc) আমার প্রস্তাবনা হবে। আপনি যদি পুরো নামটি টাইপ করতে চলেছেন তবে Shiftকীটির কয়েকটি টিপে টিপছেন কেন ?

তবে আপনি যদি সত্যিই এটি চান তবে এখানে একটি মোড়কের চারপাশে cdএকটি সঠিক মিলের চেষ্টা করে, এবং যদি কিছুই না থাকে তবে কেস-সংবেদনশীল ম্যাচটি সন্ধান করে এবং যদি এটি অনন্য হয় তবে তা সম্পাদন করে। এটি nocaseglobকেস-সংবেদনশীল গ্লোববিংয়ের জন্য শেল বিকল্পটি ব্যবহার করে এবং যুক্তি যুক্ত করে একটি গ্লোবে পরিণত করে @()(যা কোনও কিছুর সাথে মেলে না এবং প্রয়োজন extglob)। extglobবিকল্প অন্যথায় ব্যাশ এমনকি এটি বিশ্লেষণ করতে পারি না, যখন ফাংশন সংজ্ঞায়িত চালু করতে হবে। এই ফাংশনটি সমর্থন করে না CDPATH

shopt -s extglob
cd () {
  builtin cd "$@" 2>/dev/null && return
  local options_to_unset=; local -a matches
  [[ :$BASHOPTS: = *:extglob:* ]] || options_to_unset="$options_to_unset extglob"
  [[ :$BASHOPTS: = *:nocaseglob:* ]] || options_to_unset="$options_to_unset nocaseglob"
  [[ :$BASHOPTS: = *:nullglob:* ]] || options_to_unset="$options_to_unset nullglob"
  shopt -s extglob nocaseglob nullglob
  matches=("${!#}"@()/)
  shopt -u $options_to_unset
  case ${#matches[@]} in
    0) # There is no match, even case-insensitively. Let cd display the error message.
      builtin cd "$@";;
    1)
      matches=("$@" "${matches[0]}")
      unset "matches[$(($#-1))]"
      builtin cd "${matches[@]}";;
    *)
      echo "Ambiguous case-insensitive directory match:" >&2
      printf "%s\n" "${matches[@]}" >&2
      return 3;;
  esac
}

ksh

আমি যখন তা করছি, এখানে ksh93 এর জন্য একই ধরণের ফাংশন। ~(i)কেস-অবশ মিলের জন্য পরিবর্তিত সঙ্গে বেমানান হবে বলে মনে হয় /প্রত্যয় শুধুমাত্র ডিরেক্টরি মেলে (এই ksh আমার রিলিজে বাগ হতে পারে)। তাই আমি নন-ডিরেক্টরিগুলি ছাটাই করার জন্য একটি ভিন্ন কৌশল ব্যবহার করি।

cd () {
  command cd "$@" 2>/dev/null && return
  typeset -a args; typeset previous target; typeset -i count=0
  args=("$@")
  for target in ~(Ni)"${args[$(($#-1))]}"; do
    [[ -d $target ]] || continue
    if ((count==1)); then printf "Ambiguous case-insensitive directory match:\n%s\n" "$previous" >&2; fi
    if ((count)); then echo "$target"; fi
    ((++count))
    previous=$target
  done
  ((count <= 1)) || return 3
  args[$(($#-1))]=$target
  command cd "${args[@]}"
}

Zsh

অবশেষে, এখানে একটি zsh সংস্করণ। আবার কেস-সংবেদনশীল সমাপ্তির অনুমতি দেওয়া সম্ভবত সেরা বিকল্প। নীচের সেটিংটি যদি কেস-সংবেদনশীল গ্লোব্বিংয়ে ফিরে আসে তবে কোনও সঠিক-কেস ম্যাচ না হলে:

zstyle ':completion:*' '' matcher-list 'm:{a-z}={A-Z}'

''যথাযথ ক্ষেত্রে মিল থাকলেও সমস্ত কেস-সংবেদনশীল ম্যাচগুলি দেখানোর জন্য সরান । আপনি এটির মেনু ইন্টারফেস থেকে সেট করতে পারেন compinstall

cd () {
  builtin cd "$@" 2>/dev/null && return
  emulate -L zsh
  setopt local_options extended_glob
  local matches
  matches=( (#i)${(P)#}(N/) )
  case $#matches in
    0) # There is no match, even case-insensitively. Try cdpath.
      if ((#cdpath)) &&
         [[ ${(P)#} != (|.|..)/* ]] &&
         matches=( $^cdpath/(#i)${(P)#}(N/) ) &&
         ((#matches==1))
      then
        builtin cd $@[1,-2] $matches[1]
        return
      fi
      # Still nothing. Let cd display the error message.
      builtin cd "$@";;
    1)
      builtin cd $@[1,-2] $matches[1];;
    *)
      print -lr -- "Ambiguous case-insensitive directory match:" $matches >&2
      return 3;;
  esac
}

1
এটা অসাধারণ. এটি কাজ করার inputrcজন্য আপনাকে এটি যুক্ত করতে হবে। echo "set completion-ignore-case on" >> ~/.inputrc
এটির

@ জেসে জ্যাকসন হ্যাঁ, এটি এখানে অন্তর্নিহিত ছিল কারণ প্রশ্নকর্তা ইতিমধ্যে জানতেন, তবে আমি ভবিষ্যতের দর্শকদের জন্য আমার উত্তরটিতে এটি যুক্ত করব।
গিলস 15:34-

cd:cd:17: no such file or directory: videosVideos
এটির

@ user7000 কোন সংস্করণ, কোন শেলের নিচে?
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
@ user7000 zsh 5.0.7 এর অধীনে আমার জন্য কাজ করে। হতে পারে আপনি এমন একটি বিকল্প সেট করেছেন যা গ্লোব্বিংয়ের কাজ করার পদ্ধতি পরিবর্তন করে? আপনি যদি পরিবর্তন করেন তবে এটি কী সহায়তা emulate -L zshকরে emulate -LR zsh? (পথ আমি শুধু একটি বাগ সংশোধন করে হওয়া উচিত ছিল, কসম emulate -L zsh, না emulate zsh, অন্যথায় এটি জড়ান আপনার শেল অপশন would।)
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.