ইতিহাস ফাইলগুলি কি ব্যাশে একীভূত হতে পারে?


35

আমি নিয়মিত screenআমার লিনাক্স ডেস্কটপ এবং সার্ভারগুলিতে একাধিক সেশন চালাই ।

এটির সাথে একটি সমস্যা হ'ল আমি যখন grepআমার কমান্ডের ইতিহাসের মাধ্যমে দেখি তখন আমি একটি পৃথক সেশনে একটি কমান্ড জারি করেছিলাম এবং ইতিহাসের আইটেমটি পেতে আলাদা এবং পুনরায় সংযুক্ত করতে হবে।

একাধিক অধিবেশন থেকে সকলের কেন্দ্রীয় ইতিহাসে যাওয়ার জন্য পৃথকভাবে আপডেট হওয়া ইতিহাসগুলিকে 'জোর করা' কী সম্ভব?


আমি একটি অনুরূপ ইস্যুতে দৌড়েছি যার মাধ্যমে আমি টার্মিনাল সেশনের মধ্যে ইতিহাস দেখতে সক্ষম হইনি। আমার ~ / .bash_history ফাইলটি রুটের মালিকানাধীন ছিল এবং লিখনযোগ্য নয়। আমার ব্যবহারকারীর মালিক / গোষ্ঠী পরিবর্তন করার বিষয়টি এই সমস্যার সমাধান করেছে: sudo chown <user>: <group> g / .Bash_history
mateo

উত্তর:


41

আপনার দুটি জিনিস করতে হবে:

  1. shopt -s histappendআপনার মধ্যে কমান্ড সন্নিবেশ করুন.bashrc । এটি ওভাররাইটের পরিবর্তে ইতিহাসের ফাইলটিতে যুক্ত হবে।
  2. এছাড়াও আপনার .bashrc, সন্নিবেশ করুন PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"এবং ইতিহাস ফাইলটি পুনরায় লিখিত হবে এবং প্রতিবার পাঠের সময় পুনরায় পড়বে বাশ প্রম্পটটি দেখায়।

সম্পাদনা করুন: ই-t172 ধন্যবাদ history -nকৌতুক


6
এর জন্য ধন্যবাদ. আমি PROMPT_COMMAND = "$ PROMPT_COMMAND; ইতিহাস -a; ইতিহাস -n" ব্যবহার করে এটি আরও উন্নত করেছি। এইভাবে, অন্যান্য সেশনে জারি হওয়া আদেশগুলি তত্ক্ষণাত বর্তমান সেশনের ইতিহাসে উপস্থিত হবে (ভাল, ইতিহাস আপডেট করার জন্য আপনাকে প্রথমে এন্টার টিপুন)।
এটিয়েন ডেকহ্যাম্পস

8
আমি PROMPT_COMMANDআগে সংজ্ঞায়িত করিনি , সুতরাং PROMPT_COMMAND="history -a; history -n"ত্রুটিগুলি এড়াতে আমাকে ব্যবহার করতে হয়েছিল।
উইলিয়াম জ্যাকসন

1
সঠিক ইতিহাস -a, -c, এবং -r কমান্ডের জন্য দয়া করে superuser.com/a/734410/250287 উত্তর দেখুন ।
এমডি

নতুনদের জন্য কেবল একটি সতর্কতা: কিছুক্ষণ ইতিহাস পুনর্লিখন ব্যবহার করার পরে, আমি বুঝতে পেরেছিলাম যে আমি প্রায়শই ভুল কমান্ড জারি করি; আপনি যখন আগের লাইনে কিছু কমান্ড দেখেন, আপনি এটির পুনরাবৃত্তি করার প্রত্যাশা করেন এবং এই কনফিগারেশনের মাধ্যমে এটি আর হয় না।
টিয়াগো

11

দয়া করে ব্যবহার করবেন না history -a; history -n, এটি আপনার প্রত্যাশার মতো কাজ করে না এবং আপনার ইতিহাসে অর্ডার কমান্ডের বাইরে অনেকগুলি নকল দিয়ে আপনাকে ছেড়ে দেবে। একটি সমাধান যা প্রত্যাশা অনুযায়ী সাধারণত কাজ করে তা হল:

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

সেমিকোলনের পরিবর্তে একটি নতুন লাইন ব্যবহার করা PROMPT_COMMAND এর সাথে অনুপস্থিত / সদৃশ সেমিকোলন সমস্যা মোকাবেলার একটি ছোট উপায় short


ইতিহাস -a, -সি, এবং তারপরে সঠিক ... এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
এমডি

1
exportপ্রয়োজন নেই। কারণ ইন্টারেক্টিভ শেল বিকল্পগুলি সেট করার কথা রয়েছে ~/.bashrcযা থেকে প্রতিটি উপ শেল থেকে কল করা হয়, সুতরাং উত্তরাধিকারের প্রয়োজন হয় না।
ডলম্যান

কেবল PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"পরিবর্তে ব্যবহার না করার জন্য কি কোনও ভাল কারণ আছে ?
ছয়

এই আদেশের জন্য ইতিহাস কমান্ডগুলি চালনার আগে শেষ প্রস্থান মানটি সঞ্চয় করা দরকার, কারণ অনেকগুলি প্রম্পট কমান্ড এটি নির্ভর করে বা প্রদর্শন করে।
অ্যাডাম ক্রেন

-1

PROMPT_COMMAND কিছু ডিস্ট্রোজে ডিফল্টরূপে সংজ্ঞায়িত হয় না। উদাহরণস্বরূপ, এটি আর্কে সংজ্ঞায়িত করা হয়েছে, তবে ডেবিয়ানে নয়।

আমার ড্রপবক্সে আমার একটি বাশার্ক রয়েছে যা আমি ডিস্ট্রো হপিংয়ের সময় ব্যবহার করি এবং এতে অন্তর্ভুক্ত রয়েছে:

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

একটি বেসিক শেল প্রোগ্রামিং সমস্যার একটি ভয়ঙ্কর সমাধান। সঠিক উপায়:PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
ডলম্যান

আরও ভাল:PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'
ডলম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.