কীভাবে: আনলিমিটেড ব্যাশ / শেল ইতিহাস?


83

বাশে সীমাহীন ইতিহাস সংজ্ঞায়নের কোনও উপায় আছে কি?

উত্তর:


82

এটি আপনার .bashrc(লিনাক্স) বা .bash_profile(ম্যাকোএস) যোগ করুন:

export HISTFILESIZE=
export HISTSIZE=

আপনি সেখানে যান, সীমাহীন ইতিহাস। বর্তমানে আমার 27000 এন্ট্রি রয়েছে :)

থেকে man bash:

যদি HISTFILESIZEসেট না করা থাকে তবে কোনও ছাঁটাই করা হয় না।

তার মানে .bash_historyকখনই কেটে যায় না

একইটি প্রযোজ্য বলে মনে হয় HISTSIZE, যদিও আমি এটি নথিভুক্ত পাইনি।

আরেকটি ঝরঝরে বৈশিষ্ট্য যা আমি চেষ্টা করতে চলেছি তা হ'ল:

যদি HISTTIMEFORMATভেরিয়েবলটি সেট করা থাকে, ইতিহাস স্ট্যাটাসে টাইম স্ট্যাম্পগুলি লিখিত থাকে, ইতিহাসের মন্তব্য চরিত্রের সাহায্যে চিহ্নিত করা হয়, সুতরাং সেগুলি নীচের মত শেল সেশনে সংরক্ষণ করা যেতে পারে:

export HISTTIMEFORMAT="%F %T "

আপনি যদি ইতিমধ্যে এটি চেষ্টা করে থাকেন তবে আমাকে জানান ...


3
এটি প্রকৃতপক্ষে অনেক ক্ষেত্রে কাজ করে না এবং ব্যাশের ইতিহাস এখনও কেটে যায়। আরও সম্পূর্ণ সমাধানের জন্য নীচে আমার উত্তরটি দেখুন।
fotinakis

2
সতর্কতা: এর ফলে মাথা ব্যথা হয় gdb; আপনি যদি কোনও HISTSIZEভেরিয়েবল সেট করে থাকেন তবে এটি 0 হিসাবে নেবে, এভাবে ইতিহাসের আকার পুরোপুরি অক্ষম করে।
মাত্তেও ইটালিয়া

2
দ্রষ্টব্য: আপনার প্রয়োজন নেই export, HISTFILESIZEলাইনের সংখ্যায় রয়েছে (বাইট নয়) এবং যখন আপনি ভেরিয়েবল সেট করেন HISTFILESIZE (এবং যখন শেল প্রস্থান হয়) ইতিহাসের ফাইল কাটা ঘটে । তাই বিভিন্ন মান দিয়ে আপনার কনফিগ ফাইলে দুইবার এটি সেট না ...
vaab

@বাব: আমি যদি হিস্টফিল রফতানি না করি তবে আমি দেখতে পাচ্ছি না যে আমার হিস্টফিল সাবহেলগুলিতে "ইকো $ হিস্টফিল" কী ব্যবহার করছে, সুতরাং এটি প্রয়োজনীয় না হলেও এটি সহায়ক হতে পারে এবং আমি সনাক্ত করতে পারি এমন কোনও ক্ষতি করে না।
জেফ লারম্যান

41

(আমার উত্তরটি https://stackoverflow.com/a/19533853/128597 থেকে পুনরায় পোস্ট করা )

বছরের পর বছর ধরে অনেকগুলি বড়, কুরুচিপূর্ণ পুনরাবৃত্তি এবং অদ্ভুত প্রান্তের কেস পরে, আমার এখন এটি নিবেদিত আমার .brcrc এর একটি সংক্ষিপ্ত বিভাগ রয়েছে ।

প্রথমত, আপনাকে অবশ্যই আপনার .bashrc এর এই বিভাগটি (উবুন্টুর জন্য ডিফল্ট) মন্তব্য করতে হবে বা মুছে ফেলতে হবে । যদি আপনি এটি না করেন, তবে নির্দিষ্ট পরিবেশ (যেমন চলমান screenসেশনগুলি) এখনও আপনার ইতিহাস কেটে দেবে:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

দ্বিতীয়ত, এই অ্যাড আপনার .bashrc নীচে:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

দ্রষ্টব্য: প্রতিটি কমান্ড চালানোর সাথে সাথেই লিখিত হয়, সুতরাং যদি আপনি দুর্ঘটনাক্রমে কোনও পাসওয়ার্ড পেস্ট করেন তবে ইতিহাস রচনাটি এড়ানোর জন্য আপনি কেবল "কিল -9%%" করতে পারবেন না, আপনাকে এটি ম্যানুয়ালি অপসারণ করতে হবে।

এছাড়াও নোট করুন যে প্রতিটি বাশ সেশন পুরো ইতিহাসের ফাইলটিকে মেমরিতে লোড করবে, তবে আপনার ইতিহাস ফাইলটি 10 ​​এমবিতে বেড়ে গেলেও (এটি একটি দীর্ঘ, দীর্ঘ সময় নিতে পারে ) আপনি আপনার বাশ শুরু হওয়ার সময় খুব বেশি প্রভাব ফেলবেন না।


4
আপনি সেট করার পরে ইতিহাসের ফাইলটি ছাঁটা হয়ে যায় HISTFILESIZE, এ কারণেই আপনার পছন্দের ইভেন্টটি বাদ দিয়ে আপনার যেমন কোনও ঘটনার সরিয়ে নেওয়া উচিত। এটি শেল প্রস্থান করার সময়ও কেটে যাবে (তবে এটি প্রত্যাশিত)। এবং আপনার প্রয়োজন হবে না export
ভ্যাব

3
@vaab আপনি যদি রফতানি না করেন তবে এর মতো কিছু করা bash --norcইতিহাসকে আবার ছিন্ন করবে।
ইওংওয়ে উ

1
আমি export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"শেল ইতিহাস প্রতি সেশনে পৃথক রাখতে ব্যবহার করি (হোস্টনাম এবং টিটিএম নামের উপর ভিত্তি করে) অবশ্যই আমাকে প্রথমে ~ / হিস্ট ডিরেক্টরি তৈরি করতে হবে।
জেফ লারম্যান

2
দ্রষ্টব্য আপনি PROMPT_COMMAND এর মান পরীক্ষা করতে এবং অন্ধভাবে এটি বারবার সংযোজন না করতে পারেন কারণ এটি আপনার সিস্টেমে পাগল জিনিসগুলি করবে। একটি নাল চেক বা আরও ভাল শেল ভেরিয়েবল প্রসারণ অনুসন্ধান সম্ভবত নিরাপদ।
ড্রাগন 788

3
@ ড্রাগন 78৮৮ উল্লেখ করা সমস্যাটি এড়াতে আমি এটি ব্যবহার করেছি:PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
ব্রায়ান ভ্যান্ডেনবার্গ

9

~ / .Bashrc এ অন্তর্ভুক্ত করুন :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

এই উত্তরটি নিম্নলিখিত মানদণ্ডগুলিকে সন্তুষ্ট করে:

  1. একটি পৃথক মাস্টার ইতিহাস (কোনও সেশন আপনার ইতিহাসকে বাধা দিতে পারে না)

  2. স্বয়ংক্রিয় ইতিহাস রচনা (হটকি নেই)

  3. বিরল লেখা (প্রতিটি আদেশের পরে কোনও সংযোজন নেই)

পটভূমি

ইন্টারেক্টিভ স্টার্টআপে, যদি $HISTFILESIZEকোনও সংখ্যায় সেট করা থাকে, বাশ $HISTFILEসেই সংখ্যাটিতে সংক্ষিপ্ত হয়ে যায়। ইন্টারেক্টিভ ক্লোজালে, যদি শেল বিকল্পটি histappendসেট করা থাকে তবে ব্যাশ $HISTSIZEলাইনগুলিকে এতে যুক্ত করে $HISTFILE, অন্যথায় এটি ওভাররাইট করে $HISTFILE

ওএসএক্স (টার্মিনাল) এর টিপস

প্রতিবার টার্মিনালে একটি ট্যাব তৈরি করা হয়, ~/.bash_profileএটি পঠিত হয়, যার অর্থ বাশ আপনার পড়তে যায় না ~/.bashrc। আপনার সাথে নিম্নলিখিত লাইনটি যুক্ত করুন ~/etc/bash_profile:

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

পর্দার জন্য টিপস

আপনি যদি স্ক্রিন ব্যবহার করেন তবে আপনার কনফিগারেশন ফাইলটি ~ / .স্ক্রিনসিআরসি। আপনি যদি স্ক্রিনটি ইতিহাস রেকর্ড করতে চান তবে আপনাকে কেবল একটি লগইন শেল ব্যবহারের জন্য এটি সেট করতে হবে যা আপনার বাশ স্টার্টআপ ফাইলগুলি উত্স করবে (এবং আপনার ইতিহাস রেকর্ড করবে)।

# use bash, make it a login shell
defshell -bash

3

একটি আলাদা ধারণা (প্রযোজ্য নাও হতে পারে) তবে শেল-সিঙ্কunlimited ব্যবহার করার সময় আপনার ইতিহাস থাকতে পারে ।

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