একাধিক কনসোল থেকে বাশ ইতিহাস সংরক্ষণ করা সঠিকভাবে কাজ করছে না


9

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

# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"  
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1

আমি আমার প্রম্পটে কমান্ড নম্বর দেখতে শেষ লাইনটি দিয়েছি। কমান্ড নং। কখনও 600০০ এর উপরে উঠেনি, তবে এখনও আমার কিছু পুরানো কমান্ড ইতিহাস থেকে অদৃশ্য হয়ে যাচ্ছে। অনেকগুলি কমান্ড রয়েছে যা বারবার দেওয়া হয়, তবে যেমনটি প্রত্যাশা করা হয় ignoredups, এটি প্রম্পটে কখনই কম্যান্ড বাড়ায় না। তবুও পুরানো কমান্ডগুলি এখনও অদৃশ্য হয়ে গেছে nd এবং ইতিহাসে কমান্ডের সংখ্যা সর্বদা 500 এর চেয়ে কিছুটা বেশি থাকে।

এই .bash_historyফাইলটিতে এখনও উপেক্ষা করা সত্ত্বেও প্রচুর নকল রয়েছে।

PS: প্রতিধ্বনির ফলাফল $HISTSIZEএবং $HISTFILESIZEউভয়ই both=1000


আপডেট: উপরের এন্ট্রিটিতে আমি সমস্যাটি পেয়েছি .bashrc। কেবল কল history -aকরা PROMPT_COMMANDকেবলমাত্র .bash_history এ সর্বশেষ নতুন কমান্ড যুক্ত করে। সুতরাং ignoredupsএবং erasedupsকোন প্রভাব আছে।

কোনও উপায় আছে কি, আমি এখনও প্রতিটি টার্মিনাল থেকে নকল ছাড়াই .bash_history লিখতে পারি? আমি প্রতিটি কমান্ড প্রম্পটে পুরো ইতিহাসটি লোড করতে history -rএবং এটি দিয়ে আবার লিখতে চাই না history -w, কারণ একটি টার্মিনালে আমি যে আদেশগুলি জারি করেছি তা অন্য সমান্তরাল চলমান টার্মিনালে উপস্থিত হবে। আমি চাই যে সম্মিলিত কমান্ডগুলি কেবলমাত্র একটি নতুন টার্মিনালে প্রদর্শিত হবে।

ধাঁধাটি, কেন আমার ইতিহাসটি 500 এ ছাঁটাই হচ্ছে solved আমি লক্ষ্য করেছি যে প্রতিবার এই মেশিনে প্রবেশ করার সময় এটি ঘটেছিল। .bash_profileনিম্নলিখিত এন্ট্রি সহ একটি তৈরি করা এই সমস্যার সমাধান করে।

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

এখন আমার .bashrc প্রতিবারই এসএসআই কার্যকর করা হবে। এবং ইতিহাসের ফাইলের আকার এখন একঘেয়েমি বাড়ছে।



না আমি অলির তালিকার দ্বিতীয় প্রয়োজনীয়তা এড়াতে চাই। আমি চাই না আমার বিভিন্ন টার্মিনালের ইতিহাস মিশ্রিত হোক। যতক্ষণ না আমি একটি নতুন টার্মিনাল শুরু করি। আমি যখন সঠিকভাবে আমার মেশিনটি বন্ধ করি তখন স্বাভাবিকভাবেই এটি ঘটে। তবে কখনও কখনও যথাযথ শাটডাউন সম্ভব হয় না এবং যতক্ষণ না আমি তাত্ক্ষণিকভাবে ইতিহাসটি সংরক্ষণ করি, সমস্ত হঠাৎ বিদ্যুৎ বন্ধ হয়ে যাবে।
indiajoe

bug-bashএই প্রশ্নটি পোস্ট হওয়ার এক বছর পরে মেলিং তালিকায় উঠে আসা প্রশ্নের মতই অনেকটা একরকম মনে হচ্ছে : list.gnu.org/archive/html/bug-bash/2013-07/msg00092.html
সিনট্যাক্সারর

উত্তর:


1

আমি উপসংহারে পৌঁছেছি যে নতুন কমান্ডগুলি সরাসরি এবং একই সাথে কোনও নকল অপসারণের জন্য যুক্ত করা সম্ভব নয়। সুতরাং আমার সমাধানটি হ'ল কিছুক্ষণের মধ্যে নিম্নলিখিত কমান্ডগুলি চালানো। বা আমার crontab এ এটি রাখা।

tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp 
mv $HOME/.hist_Temp $HOME/.bash_history

উপরের কমান্ডটি একটি কমান্ডের শেষ ঘটনাটি রাখবে এবং তার উপরে থাকা সমস্ত অন্যান্য পুনরাবৃত্তিগুলি অর্ডারটি গোলমাল না করে ইতিহাস ফাইল থেকে সরিয়ে ফেলবে।


0

এটি কুৎসিত, এবং আমি নিশ্চিত যে sedবা awkআরও ভাল হবে, তবে আমি আমার সমস্যাটিতে এটি যোগ করে একই সমস্যাটি সমাধান করার চেষ্টা করেছি .bashrc:

export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'`

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

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