একটি ফোল্ডারে "স্থানীয়" বাশ ইতিহাস মনে আছে?


11

আমার একটি ফোল্ডারে একটি স্ক্রিপ্ট রয়েছে যা আমি দীর্ঘ যুক্তি দিয়ে ব্যবহার করি। পুরো ইতিহাসটি ফিরে যাওয়ার পরিবর্তে সেই নির্দিষ্ট ডিরেক্টরিতে কমান্ডগুলি কার্যকর করার কোনও ইতিহাস আছে কি?


3
আকর্ষণীয় প্রশ্ন। বিটিডাব্লু, "পুরো ইতিহাসের মধ্যে দিয়ে ফিরে যেতে" আপনি এটি অনুসন্ধান করতে Ctrl + R ব্যবহার করতে পারেন, আমি এ জাতীয় পরিস্থিতিতে এটিই করতাম।
পিএইচকে

হ্যাঁ, এটি সাহায্য করে তবে এই পথে আমার কাছে কেবল শেষটি রয়েছে। একাধিক ফলাফল হওয়ার কি কোনও সম্ভাবনা আছে?
ফেবার

1
একবার আপনি কমান্ড নামের অংশটি প্রবেশ করে আপনি Ctrl + R টিপতে পারেন।
এমটাহেমেড

history | lessসম্ভবত? এটি সত্যিই আপনার প্রশ্নের উত্তর দেয় না তবে আমি এটিই শুরু করব।
রোয়াইমা

@roaima এবং তারপর ব্যবহার করে অনুসন্ধান "/" + + অনুসন্ধান মেয়াদী + + লিখুন এবং তারপর "এন" / "এন" ফরোয়ার্ড / পিছন আরও অনুসন্ধানের জন্য।
পিএইচকে

উত্তর:


2

বাশের PROMPT_COMMAND এ Byুকিয়ে এই ফাংশনটি প্রতিবার নতুন প্রম্পট পেলে চালিত হয়, তাই আপনি কাস্টম ইতিহাস চাইছেন এমন কোনও ডিরেক্টরিতে আছেন কিনা তা যাচাই করার জন্য এটি একটি শালীন সময়। ফাংশনটির চারটি প্রধান শাখা রয়েছে:

  1. যদি বর্তমান ডিরেক্টরি ( $PWD) পরিবর্তন না হয়, তবে কিছুই (রিটার্ন) করবেন না।

গণপূর্ত বিভাগের তাহলে করেছেন পরিবর্তিত, তাহলে আমরা একটি স্থানীয় ফাংশন যার একমাত্র উদ্দেশ্য ফ্যাক্টর এক স্থানে "কাস্টম ডিরেক্টরি" কোড সেট আপ করুন। আপনি আমার পরীক্ষা-ডিরেক্টরিগুলি আপনার নিজের দ্বারা পৃথক করতে চান (দ্বারা পৃথক |)।

  1. যদি আমরা কোনও কাস্টম ডিরেক্টরিতে বা এর বাইরে না গিয়ে থাকি তবে কেবল "পূর্ববর্তী ডিরেক্টরি" ভেরিয়েবলটি আপডেট করুন এবং ফাংশন থেকে ফিরে আসুন।

যেহেতু আমরা ডিরেক্টরিগুলি পরিবর্তন করেছি, "পূর্ববর্তী ডিরেক্টরি" ভেরিয়েবলটি আপডেট করুন, তারপরে ইন-মেমরির ইতিহাসটিকে HISTFILE এ সংরক্ষণ করুন, তারপরে ইন-মেমরির ইতিহাস সাফ করুন।

  1. যদি আমরা একটি কাস্টম ডিরেক্টরিতে পরিবর্তিত হয়ে থাকি , তবে .bash_historyবর্তমান ডিরেক্টরিতে একটি ফাইল হিসাবে HISTFILE সেট করুন।

  2. অন্যথায়, আমরা একটি কাস্টম ডিরেক্টরি থেকে পরিবর্তিত হয়েছি , সুতরাং স্টকটিতে HISTFILE পুনরায় সেট করুন।

অবশেষে, যেহেতু আমরা ইতিহাসের ফাইলগুলি পরিবর্তন করেছি, সেই আগের ইতিহাসটি আবার পড়ুন।

জিনিসগুলি যেতে, স্ক্রিপ্টটি PROMPT_COMMAND মান নির্ধারণ করে এবং দুটি অভ্যন্তরীণ-ব্যবহার ভেরিয়েবল (স্টক হিস্টফিল এবং "পূর্ববর্তী ডিরেক্টরি") সংরক্ষণ করে।

prompt_command() {
  # if PWD has not changed, just return
  [[ $PWD == $_cust_hist_opwd ]] && return

  function iscustom {
    # returns 'true' if the passed argument is a custom-history directory
    case "$1" in
      ( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
      ( * ) return 1;;
    esac
  }

  # PWD changed, but it's not to or from a custom-history directory,
  # so update opwd and return
  if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
  then
    _cust_hist_opwd=$PWD
    return
  fi

  # we've changed directories to and/or from a custom-history directory

  # save the new PWD
  _cust_hist_opwd=$PWD

  # save and then clear the old history
  history -a
  history -c

  # if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
  if iscustom "$PWD"
  then
    HISTFILE=$PWD/.bash_history
  else
    HISTFILE=$_cust_hist_stock_histfile
  fi

  # pull back in the previous history
  history -r
}

PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD

0

আপনি যদি কোনও একক ডিরেক্টরিতে ইতিহাস চান তবে জেফের উত্তর দুর্দান্ত, তবে আপনি যদি zsh ইনস্টল করতে ঠিক থাকেন তবে আপনি প্রতিটি ডিরেক্টরিতে ডিরেক্টরি সম্পর্কিত একটি ইতিহাস পেতে প্রতি-ইতিহাস-ডিরেক্টরি ব্যবহার করতে পারেন ।

আপনি এর মাধ্যমে zsh ইনস্টল করতে পারেন:

brew install zsh

বিকল্পভাবে, আপনি যদি ওহ-মাই-জেডএস ইনস্টল করতে চান তবে আপনি হিস্টডিবি প্লাগইনটিতে যোগ করতে এবং হিস্টডিবিতে যুক্ত স্ক্লাইট ডিবি সম্পর্কে জিজ্ঞাসা করার জন্য একটি কাস্টম ক্যোয়ারী লিখতে পারেন that আমি এই সম্পর্কে লিখেছিলাম এবং একটি দেব ডায়েরি পোস্টে অটো সম্পূর্ণকরণ যুক্ত করেছি । বোনাস কমান্ড বিভাগ পরীক্ষা করুন ।

ক্যোয়ারীটি এমন দেখাচ্ছে

show_local_history() {
    limit="${1:-10}"
    local query="
        select history.start_time, commands.argv 
        from history left join commands on history.command_id = commands.rowid
        left join places on history.place_id = places.rowid
        where places.dir LIKE '$(sql_escape $PWD)%'
        order by history.start_time desc
        limit $limit
    "
    results=$(_histdb_query "$query")
    echo "$results"
}

এটি পাশাপাশি একটি limitচ্ছিক সীমা গ্রহণ করে:

show_local_history 50

উদাহরণ স্বরূপ.


-1

যখন আমাকে বেশ কয়েকবার দীর্ঘ যুক্তি সহ কমান্ডটি ব্যবহার করার দরকার হয়, আমি সাধারণত আমার মধ্যে একটি উপনাম তৈরি করি ~/.bash_aliasesবা আপনি ~/.bashrcযদি চান তবে এটি আপনার মধ্যে রাখতে পারেন। ইতিহাসের পুরানো আদেশগুলি সন্ধানের পরিবর্তে এটি সহজ এবং সময় সাশ্রয়।


1
এটি একটি ভাল ইঙ্গিত কিন্তু ওপি যা খুঁজছিল তা নয়। ওপি সে যা খুঁজছিল তার জন্য বেশ সুনির্দিষ্ট ছিল (একটি সমাধান আমি বিটিডব্লুও সাইন আপ করবো)।
পিএইচকে

@ পিএফকে আপনি ঠিক বলেছেন, আমি পরের বার আরও সতর্ক থাকব! তোমার ব্যাখ্যার জন্য ধন্যবাদ!
andreatsh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.