আমি আমার বাশ ইতিহাসকে কীভাবে অধিবেশন জুড়ে রাখতে পারি?


27

আমি ফেডোরা 9 চালানোর জন্য x86 টার্গেটে কাজ করছি।

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

পুনরায় বুট করার আগে আমার কাছে আপডেটের ইতিহাস থাকতে আমার কী পরিবর্তন করতে হবে?


তিনি জিজ্ঞাসা করছেন, "আমি কীভাবে আমার বাশ ইতিহাসকে সেশন জুড়ে রাখব?", যা শেল প্রোগ্রামিংয়ের সাথে সম্পর্কিত। রিবুট হ'ল আপনার শেলটি হারাতে নাটকীয় উপায় all বিষয় বন্ধ করার দরকার নেই।
জোনাথন লেফলার

ভাল পয়েন্ট — সম্ভবত এটি সুপার ইউজারে স্থানান্তরিত হওয়া উচিত।
বিআর

@ জনাথন হ্যাঁ, আপনি প্রশ্নটি সঠিক পেয়েছেন। ঠিক কী জিজ্ঞাসা করব তা নিশ্চিত ছিলাম না।

প্রতিটি কমান্ড কার্যকর করার পরে সংরক্ষণ করা, অধিবেশন শেষে নাও সহায়তা করবে। এটি কারণ যদি আপনি একই সাথে দুটি সেশন চালাচ্ছেন তবে নীচের লাইনটি ছাড়াই বাশ ইতিহাসটি সেশন -১ (সংরক্ষণ করুন) থেকে বন্ধ করবে যখন সংরক্ষণ করবে। যদি সেশন -১ চলমান থাকে এবং আপনি তাত্ক্ষণিক সেশন -২ এর মধ্যে সেশন -১ এর ইতিহাস অ্যাক্সেস করতে চান, তবে আপনি নীচের লাইনটি .bashrc ফাইলে যোগ না করা পর্যন্ত আপনি সক্ষম হতে পারবেন না। PROMPT_COMMAND = 'ইতিহাস -a'
অভিনব

উত্তর:


16

কোন ইতিহাস? ব্যাশ-ইতিহাস? যদি আপনি বাশ ইতিহাস হারিয়ে ফেলেন এবং আপনার একসাথে একাধিক সেশন রয়েছে, কারণ প্রতিটি সেশনটি অন্য সেশনের ইতিহাসকে ওভাররাইট করে।

আপনি সম্ভবত বাশকে বলতে চান যে প্রতিবারের ইতিহাস মুছে ফেলা হবে না, বরং এতে যুক্ত হয়ে যেতে পারেন। আপনি এটি চালাতে আপনার .Bashrc পরিবর্তন করে এটি করতে পারেন shopt -s histappend

আপনি HISTSIZ রফতানি করে আপনার ইতিহাস ফাইলের আকারও বাড়িয়ে দিতে পারেন একটি বড়-ইশ নম্বর হতে (এটি বাইটে রয়েছে, সুতরাং 100000 প্রচুর পরিমাণে হওয়া উচিত)।


7
HISTSIZEকমান্ডের মনে রাখার সংখ্যা, বাইটের সংখ্যা নয়।
ক্রিস ডাউন

10

আমি একই সমস্যা ভুগছিলেন - কিন্তু আমার .bashrcফাইল আগে থেকেই ছিল shopt -s histappendএবং সঠিক HISTFILE, HISTSIZE, HISTFILESIZE

আমার জন্য সমস্যাটি ছিল আমার .bash_historyফাইলটি আমার ব্যবহারকারীর পরিবর্তে রুটের মালিকানাধীন ছিল , তাই আমার ব্যবহারকারী কখনই প্রস্থান করার সময় সেই ফাইলটিতে সংরক্ষণ করতে পারেন নি।


3
আমি স্রেফ পেয়েছি যে মূলের মালিকানাধীন .bash_history নিয়ে আমার ঠিক একই সমস্যা ছিল। আমি আশা করি আমি আমার সমস্ত সুন্দর ইতিহাস হারিয়ে যাওয়ার আগে বুঝতে পেরেছি, তবে কিছুই নয় :-)
স্যামস্টেফেন্স

এখানেও একই - বেশ কয়েক দিন ঘোরাঘুরি শেষ হয়েছে :) ধন্যবাদ!
ডাভকা

1
sudo chmod your_user_name .bash_historyকরেছি! ধন্যবাদ।
wij

sudo chown user_name:user_name ~.bash_historyসমাধান!
আল্পার


2

আমি প্রতি সেশনে একটি ইতিহাস ফাইল সেট করার জন্য একটি স্ক্রিপ্ট লিখেছি বা নিম্নলিখিতটির উপর ভিত্তি করে টাস্ক করেছি।

    # write existing history to the old file
    history -a

    # set new historyfile
    export HISTFILE="$1"
    export HISET=$1

    # touch the new file to make sure it exists
    touch $HISTFILE
    # load new history file
    history -r $HISTFILE

এটি প্রতিটি ইতিহাসের কমান্ডটি সংরক্ষণ করার প্রয়োজন হয় না তবে এটি যেটির জন্য আমি যত্ন করি সেগুলি সংরক্ষণ করে এবং সেগুলি পুনরুদ্ধার করা সহজ এবং তারপরে প্রতিটি কমান্ডের মধ্য দিয়ে যায়। আমার সংস্করণ সমস্ত ইতিহাস ফাইলগুলি তালিকাভুক্ত করে এবং সেগুলির মাধ্যমে অনুসন্ধান করার ক্ষমতা সরবরাহ করে।

সম্পূর্ণ উত্স: https://github.com/simotek/scriptts-config/blob/master/hiset.sh


1

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

HISTCONTROL=''
HISTFOLDER=~/.bash_histories
HISTFILEEXT=history      # only files in $HISTFOLDER with this extension will be read
shopt -s histappend   # append when closing session
mkdir -p $HISTFOLDER
HISTFILE=$HISTFOLDER/$(date +%Y-%m-%d_%H-%M-%S_%N).$HISTFILEEXT  # create unique file name for this session. Nanoseconds seems to be unique enough, try: for ((i=0; i<=10; i++)); do date +%Y-%m-%d_%H-%M-%S_%N; done
# if HISTFILE unset, history is not saved on exit -> not really necessary if we save after each command, but its a double net safety
HISTSIZE=-1       # maximum number of commands to hold inside bash history buffer
HISTFILESIZE=-1   # maximum number of lines in history file
# history -a $HISTFILE # bash saves the total history commands entered since startup or since the last save and saves that amount of commands to the file. This means reading a history file after typing commands will trip up bash, but this won't be a problem if the history file is only loaded in the beginning. This means that only new commands are saved not all the old loaded commands, thereby we can load as many history files into the buffer as we want and still only save newly thereafter typed commands
PROMPT_COMMAND="history -a $HISTFILE; $PROMPT_COMMAND"  # This command is executed after very typed command -> save history after each command instead after only closing the session

# Load old histories from last 5 files/sessions
HISTLINESTOLOAD=2000
# --reverse lists newest files at first
names=($(ls --reverse $HISTFOLDER/*.$HISTFILEEXT 2>/dev/null))
toload=()
linecount=0
# Check if is really file and count lines and only append to $toload if linecount under $HISTLINESTOLOAD
for fname in ${names[*]}; do
    if test -f $fname; then
        linecount=$((linecount+$(wc -l < $fname) ))
        if test $linecount -ge $HISTLINESTOLOAD; then
            break
        fi
        toload+=($fname)
    fi
done
# Beginning with the oldest load files in $toload into bash history buffer
for (( i=${#toload[*]}-1; i>=0; i-- )); do
    history -r ${toload[$i]}
done

0

আমি নিশ্চিত করবো .বাশ_তিহাসিক বিদ্যমান আছে। যদি এটি না হয় তবে কমান্ডের ইতিহাস সংরক্ষণ করার জন্য বাশের আর কোথাও নেই।

যদি .bash_history উপস্থিত না থাকে তবে স্পর্শ চালিয়ে এটি তৈরি করুন:

touch ~/.bash_history

এটি কেবলমাত্র আপনার হোম ডিরেক্টরিতে ফাঁকা .bash_history ফাইল তৈরি করে যা আপনার আদেশগুলি পূরণ করবে এবং সেশনের মধ্যে অবিরত থাকবে।


0

আমার অ্যামাজন ইসি 2 উবুন্টু উদাহরণটি ইতিহাস সংরক্ষণ করে নি। .bashrcঅন্যান্য উত্তরে উল্লিখিত সমস্ত প্রয়োজনীয় কমান্ড ছিল তবে ফাইলটি হ'ল কেবল। এটি কাজ করতে আমাকে এটি স্পর্শ করতে হয়েছিল।

touch ~/.bash_history

-1

এই প্রশ্নের ভাল উত্তর এখানে:

http://linuxcommando.blogspot.com/2007/11/keeping-command-history-across-multiple.html


3
সুপার ইউজারে আপনাকে স্বাগতম! দয়া করে আপনার উত্তরে পর্যাপ্ত তথ্য অন্তর্ভুক্ত করুন যা প্রশ্নকারীকে কোনও বাহ্যিক লিঙ্কে ক্লিক করতে হবে না। এছাড়াও, নিশ্চিত হয়ে নিন যে আপনার উত্তরটি কেবল বিদ্যমান উত্তরগুলি সদৃশ করে না (যা সেই লিঙ্কটির তাত্ক্ষণিক দৃষ্টি থেকে দেখে মনে হচ্ছে)।
ইন্দ্রেক

//, দেখতে একটি ভাল নিবন্ধ। তবে আমি মনে করি স্ট্যাকেক্সচেঞ্জ অন্ততপক্ষে কিছুটা হলেও লিংক গন্তব্যগুলির থেকে স্বাধীন হওয়ার চেষ্টা করছে। কিছুটা ব্যাখ্যা যোগ করে মন?
নাথান বাসানিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.