বিভিন্ন ট্যাবের মধ্যে কীভাবে ভাগ করা বাশেদ ইতিহাস পাবেন


19

পৃথক ব্যাশ টার্মিনালের মধ্যে রিয়েল-টাইম ভাগ করা ইতিহাস সক্ষম করতে আমি /unix//a/1292/41729 এ উত্তরটি ব্যবহার করেছি । উপরের উত্তরে বর্ণিত হিসাবে, এটি যোগ করে এটি অর্জন করা হয়:

# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups  
# append history entries..
shopt -s histappend

# After each command, save and reload history
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

এই কাজ করে জরিমানা যদি ব্যাশ শেল (পৃথক উদাঃ খোলার বিভিন্ন ব্যাশ টার্মিনাল ব্যবহার করছেন CTRL+ALT+T। তবে এটি কাজ যদি আমি ব্যবহার করে না tabs(একটি খোলা টার্মিনাল `Ctrl + Shift + টি) বরং নতুন উইন্ডো চেয়ে থেকে। কেন কীভাবে আচরণ এই পার্থক্য আমি কি বিভিন্ন ট্যাবগুলির মধ্যে বাশ ইতিহাস ভাগ করতে পারি?

আপডেট: আমি একটি অস্বাভাবিক আচরণ লক্ষ্য করেছি : আমি যদি টাইপ করি CTRL+Cতবে অন্য কোনও টার্মিনালের টাইপ করা শেষ কমান্ডটি (একটি ট্যাব বা না উভয়ই) সঠিকভাবে প্রদর্শিত হয়। এটির মতো যদি সিটিআরএল + সি ইতিহাসের স্রোতকে বাধ্য করে যাতে এটি সঠিকভাবে ভাগ করা যায়।

উদাহরণ হিসাবে আউটপুট (টি 1 টার্মিনাল 1 এবং টি 2 টার্মিনাল 2 নির্দেশ করে):

T1:
ls -lah <enter>
# the list of files and directory is shown

T2:
cd Documents <enter>

T1:
<up> (i.e. I press the up arrow)
ls -lah #i.e the last command in terminal 1 is shown rather than the last of terminal 2
^C (i.e. I press CTRL+C)
<up>
cd Documents #the last command issued in terminal 2 is correctly displayed

আশা করি এটি কোনও ইঙ্গিত দিতে পারে!


আপনি আপনার ~.bashrcফাইল এ যোগ করেছেন ? সাইড নোটে, সেই পরিবর্তনগুলি রফতানি অর্থহীন; শুধু পরিবেশের স্থান নষ্ট করে।
গিরিহা

@geirha হ্যাঁ আমি আমার .brcrc ফাইলটিতে যুক্ত করেছি। রফতানির বিষয়ে মন্তব্য করার জন্য ধন্যবাদ।
লুকাসেরোন

উত্তর:


2

দেখে মনে হচ্ছে আপনি সিঙ্কটি সংঘটিত হওয়ার আগে অন্য টার্মিনালের ইতিহাস অ্যাক্সেস করার চেষ্টা করছেন । PROMPT_COMMANDএকটি নতুন প্রম্পট প্রিন্ট হওয়ার ঠিক আগে কার্যকর করা হয়, আপনি কমান্ড চালানোর পরে এবং পরবর্তী কমান্ডটি টাইপ করার আগে। সুতরাং এটি এখনই টি 1 এ ঘটবে না; আপনাকে একটি নতুন প্রম্পট প্রদর্শিত হতে হবে।

এটি পরীক্ষা করতে, আপনার পদক্ষেপে এই রূপটিটি ব্যবহার করে দেখুন (আমি <enter>টি 1- তে একটি অতিরিক্ত যুক্ত করেছি ):

T1:
ls -lah <enter>
# the list of files and directory is shown

T2:
cd Documents <enter>

T1:
<enter>
<up> (i.e. I press the up arrow)

প্রবেশের এই অতিরিক্ত প্রেসের সাহায্যে আপনি একটি নতুন প্রম্পট পাবেন যা PROMPT_COMMANDআপনার ইতিহাসকে চালায় এবং সিঙ্ক করে এবং তাই আপনি চাইলে এই আপ তীরটি cdপরিবর্তে পুনরুদ্ধার করবেন ls। দুর্ভাগ্যক্রমে, আমি মনে করি না যে আপনি চাইছেন এমন কোনও কমান্ড না চালিয়ে সমস্ত টার্মিনালে তাত্ক্ষণিকভাবে সিঙ্কটি ঘটানোর একটি উপায় আছে; কার্যকরভাবে এটির জন্য আপনার সমস্ত লগইন সেশনগুলি তাদের ইতিহাস তালিকাগুলি সর্বদা ক্রমাগত সিঙ্ক্রোনাইজ করা প্রয়োজন, এটি সিপিইউ এবং ডিস্ক থ্রুপুটটির একটি বিশাল অপচয়।


আপনি ঠিক বলেছেন, এন্টার টিপে এটি পরে সিঙ্ক হয়। এমনকি যদি সেখানে মেমরি বা সিপিইউ নষ্ট হয় আমি সিঙ্ক কিভাবে বাধ্য করতে পারে (যদি এটি অত্যধিক আমি সবসময় নিষ্ক্রিয় করতে পারেন এটা, কিন্তু আমি এটা ব্যবহার করে দেখুন দিতে চাই)?
lucacerone

1

আমি একই প্রশ্ন জিজ্ঞাসা করেছি এবং আমি এখানে উত্তরটি নিয়ে এসেছি ...

HISTSIZE=9000
HISTFILESIZE=$HISTSIZE
HISTCONTROL=ignorespace:ignoredups

history() {
  _bash_history_sync
  builtin history "$@"
}

_bash_history_sync() {
  builtin history -a         #1
  HISTFILESIZE=$HISTSIZE     #2
  builtin history -c         #3
  builtin history -r         #4
}

PROMPT_COMMAND=_bash_history_sync


আমি চেষ্টা করার আগে দুটি স্পষ্টতা: আমি কি অন্যান্য হাইস্টোরিগুলি অপসারণ করব? এই .bashrc মধ্যে যায়?
লুকাশেরোন

দুর্ভাগ্যক্রমে এটি কার্যকর হয় না ...
লুকাসেরোন

প্রতিটি সময় HISTFILESIZEপরিবর্তিত হয় এটি স্বয়ংক্রিয়ভাবে বিদ্যমান ইতিহাস ফাইলটি কেটে ফেলার চেষ্টা করে। পরিবর্তনের HISTSIZEবর্তমান ইতিহাসে একইরকম প্রভাব রয়েছে। রেফারেন্সের জন্য, variables.cবাশ এসআরসি- র মন্তব্যটি ঠিক আগে দেখুন sv_histsize
ব্রায়ান ভ্যান্ডেনবার্গ

1

আপনার .bashrcফাইলে সেই লাইনগুলি যুক্ত করুন

# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups  
# append history entries..
shopt -s histappend

trap 'history -r' USR1 
export PROMPT_COMMAND="history -a ; history -c; ps a | awk '/ bash$/ {system (\"kill -USR1 \" \$1)}'; $PROMPT_COMMAND"

বিঃদ্রঃ:

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

কিল্লাল যথেষ্ট পরিমাণে নির্বাচনী ছিল না, আমি এটিকে একটি স্ক্রিপ্ট দিয়ে প্রতিস্থাপন করেছি যা কেবলমাত্র টিউটি-র সাথে কেবলমাত্র প্রসেসগুলিকে মেরে ফেলে ( ps aকেবলমাত্র টিটিটির সাথে আবদ্ধ প্রক্রিয়াগুলি রিপোর্ট করে)

একটি নতুন PROMPT_COMMAND পেতে আপনার সেশনটি পুনরায় আরম্ভ করতে ভুলবেন না, যখন আমি পরীক্ষা করছিলাম তখন দেখলাম আমার পূর্ববর্তী অনেকগুলি পরীক্ষা PROMPT_COMMAND এর মধ্যে সজ্জিত।


আপনার নতুন ব্যবহারকারী এবং অন্য শেলটির দরকার নেই, আপনি killallকেবলমাত্র অতিরিক্ত -uযুক্তি , e.g. -u who (হোয়ামি) with দিয়ে একই ব্যবহারকারীর প্রসেসগুলিতে কেবল সিগন্যালটি প্রেরণ করতে বলতে পারেন can
ফিলিপ উইন্ডার

আমি মনে করি সিএসএসের বাক্য গঠনটি ভুল ... @ ফিলিপ উইন্ডার আপনি কি দয়া করে কিছুটা ব্যাখ্যা করতে পারবেন?
লুকাসেরোন

প্রশ্ন বাশ সম্পর্কে, সুতরাং আমি ব্যাশ সিনট্যাক্স ব্যবহার করেছি। আমি csh জানি না। ব্যাশ জন্য, killall -q -USR1 -u $(whoami) bashবর্তমান ব্যবহারকারীর সব ব্যাশ প্রক্রিয়াগুলিতে USR1 সংকেত পাঠায়।
ফিলিপ উইন্ডার

@ ফিলিপাই বিটিডব্লিউ আমি ডেডিকেটেড শেল সলিউশন পরীক্ষা করিনি, এটি এমন একটি মামলা ঠিক করা ছিল যেখানে ক্রোন বাশ স্ক্রিপ্টটি চলবে।
ইমানুয়েল

@ লুকা কেরোন আমি পুনর্লিখনটি কাজ করছে বলে মনে হচ্ছে
এমমানুয়েল

0

যখন ইয়াকুয়াকে বিস্তৃত বাশ প্রম্পট তৈরি করার চেষ্টা করা হয়েছিল যা অন্য লগইনের সংখ্যা দেখায় তখন আমার একই অদ্ভুত আচরণ ছিল। ট্যাবগুলির জন্য সংখ্যা বাড়েনি। আমার কর্মসূচীটি হ'ল ইয়াকুয়েককে bashপ্রতিটি নতুন ট্যাবে আবার চালানোর কথা বলা , মূলত ব্যাশে বাশ শুরু করা। এটি নির্বিঘ্নে কাজ শুরু করে। এটা হতে পারে আপনি খুব সাহায্য করবে। আমার অন্ধ অনুমান যে জিএসআইআই কনসোল লোড ব্যাশের জন্য নিজেই কনফিগার করে এবং তারপরে তাদের বাশ দৃষ্টান্তগুলিতে ফিড করে। এটি তাদের সাথে গলগল করতে সক্ষম হতে পারে।


আমি
ব্যাশে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.