প্রস্থান ছাড়াই বাশ সংরক্ষণের ইতিহাস


16

লিনাক্স উবুন্টু বাশ টার্মিনালে। প্রস্থান লিখন ছাড়া বাশ ইতিহাস সংরক্ষণ করার কোন উপায় আছে? আমি কনফিগারটি "HISTCONTROL = মুছে ফেলা" তে সেট করে রেখেছি

যা আমার মতে উপেক্ষার চেয়ে ভাল কাজ করে।

যাইহোক কোনও কারণে এটি "প্রস্থান" টাইপ না করে বাশ টার্মিনালে শেষ কয়েকটি কমান্ড সংরক্ষণ করবে না। আমি টার্মিনাল উইন্ডোতে কেবল ক্রস ক্লিক করতে ব্যবহার করেছি, তাই আমি সর্বদা বিরক্ত হই যে আমি পুনরায় চালু করার পরে শেষ কমান্ডগুলি সংরক্ষণ করা হয়নি।

অনুস্মারক: http://www.thegeekstuff.com/2008/08/15-example-to-master-linux-command-line-history/#more-130


পুট্টি থেকে টার্মিনালে রিমোট অ্যাক্সেস করার সময় প্রস্থান করার সময় বন্ধ উইন্ডো বেছে নেওয়ার বিকল্প রয়েছে: সর্বদা। যা আমার জন্য ইতিহাস রক্ষা করে।
ColacX

উত্তর:


35

বাশ ইতিহাস

সক্রিয় টার্মিনালে জারি করা যে কোনও নতুন কমান্ড .bash_historyনিম্নলিখিত কমান্ডের সাহায্যে ফাইলটিতে যুক্ত করা যেতে পারে :

history -a

বোঝার একমাত্র কৌশলটি হ'ল প্রতিটি টার্মিনালের নিজস্ব বাশ ইতিহাসের তালিকা থাকে ( .bash_historyআপনি যখন টার্মিনালটি খুলবেন তখন ফাইল থেকে লোড )

আপনি যদি এই সক্রিয় টার্মিনালের জীবদ্দশায় অন্য টার্মিনালগুলি দ্বারা রচিত কোনও নতুন ইতিহাস টানতে চান তবে আপনি .bash_history ফাইলের বিষয়বস্তুকে সক্রিয় বাশ ইতিহাসের তালিকায় যুক্ত করতে পারেন

history -c;history -r

এটি বর্তমান ইতিহাসের তালিকাটি সাফ করবে যাতে আমরা পুনরাবৃত্তি তালিকা না পাই এবং ইতিহাস ফাইলটি (এখন খালি) তালিকায় যুক্ত করব।

সমাধান

PROMPT_COMMANDপ্রতিটি নতুন প্রম্পটের সাথে কমান্ড জারি করতে আপনি ব্যাশ ভেরিয়েবলটি ব্যবহার করতে পারেন (প্রতিবার আপনি টার্মিনালে এন্টার চাপলে)

export PROMPT_COMMAND='history -a'

এটি প্রতিটি কমান্ড ইস্যু হওয়ার সাথে সাথে ইতিহাসের ফাইলটিতে রেকর্ড করবে ।

ফলাফল

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

আরও যথার্থতা

ধরা যাক (কোনও কারণে) আপনার দুটি টার্মিনাল রয়েছে যা আপনি একই সাথে ব্যবহার করছেন এবং আপনি প্রতিটি নতুন কমান্ডের জন্য ইতিহাস উভয়ের মধ্যেই প্রতিবিম্বিত করতে চান।

export PROMPT_COMMAND='history -a;history -c;history -r'

এখানে মূল ত্রুটিটি হ'ল বিপরীত টার্মিনাল থেকে সর্বশেষ ইতিহাস পাওয়ার জন্য আপনাকে PROMPT_COMMAND আবার চালাতে এন্টার টিপতে হবে।

আপনি দেখতে পাচ্ছেন যে কেন এই আরও সুনির্দিষ্ট বিকল্পটি সম্ভবত অতিরিক্ত ওভারকিল, তবে এটি ব্যবহারের ক্ষেত্রে কাজ করে।


এই সঠিক কর্মপ্রবাহ জন্য তাই ভয়ঙ্কর ....
অনুজ্জ্বল

2

ফাইলগুলিতে বাশ ইতিহাস সংরক্ষণ করতে:

history -w ~/history.txt
vim ~/history.txt

এটি ইতিহাস.txt নামক একটি ফাইলে ইতিহাস রফতানি করে। তারপরে আপনি এটি আপনার প্রিয় সম্পাদক ব্যবহার করে দেখতে পারেন।

উত্তরটি http://tech.karbassi.com/2007/01/14/view-and-change-bash-history/ থেকে অনুলিপি করা হয়েছে


1

সেখানে হয় সব আপনার ব্যাশ ইতিহাস সংরক্ষণ করার জন্য একটি উপায় একটি পৃথক ফাইলে , কিন্তু আপনি এবং ইতিহাস প্রক্রিয়া ব্যবহার করার চেষ্টা কোনো কারণে এটি আপনার ইতিহাস সংরক্ষণ করা হয় না হয়, সেটা ভিন্ন বিষয়।

আপনার সমস্ত ইতিহাস একটি পৃথক ফাইলে সংরক্ষণ করতে, সর্বদা, টার্মিনালের ক্ষেত্রে যা ঘটে তা বিবেচনা করুন

এখানে প্রদত্ত একটি স্ক্রিপ্ট কৌশলটি করে।

# don't put duplicate lines in the history. See bash(1) for more options
# ... and ignore same sucessive entries.
export HISTCONTROL=ignoreboth

# set the time format for the history file.
export HISTTIMEFORMAT="%Y.%m.%d %H:%M:%S "

# If this is an xterm set the title to user@host:dir
case "$TERM" in
  xterm*|rxvt*)
  # Show the currently running command in the terminal title:
  # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
  show_command_in_title_bar()
  {
    case "$BASH_COMMAND" in
      *\033]0*)
      # The command is trying to set the title bar as well;
      # this is most likely the execution of $PROMPT_COMMAND.
      # In any case nested escapes confuse the terminal, so don't
      # output them.
      ;;
      *)
      if test ! "$BASH_COMMAND" = "log_bash_eternal_history"
      then
        echo -ne "\033]0;$(history 1 | sed 's/^ *[0-9]* *//') :: ${PWD} :: ${USER}@${HOSTNAME}\007"
      fi
      ;;
    esac
  }
  trap show_command_in_title_bar DEBUG
  ;;
  *)
  ;;
esac

log_bash_eternal_history()
{
  local rc=$?
  [[ $(history 1) =~ ^\ *[0-9]+\ +([^\ ]+\ [^\ ]+)\ +(.*)$ ]]
  local date_part="${BASH_REMATCH[1]}"
  local command_part="${BASH_REMATCH[2]}"
  if [ "$command_part" != "$ETERNAL_HISTORY_LAST" -a "$command_part" != "ls" -a "$command_part" != "ll" ]
  then
    echo $date_part $HOSTNAME $rc "$command_part" >> ~/.bash_eternal_history
    export ETERNAL_HISTORY_LAST="$command_part"
  fi
}

PROMPT_COMMAND="log_bash_eternal_history"

ইতিহাস কমান্ড বলতে "এখনই সংরক্ষণ করুন!" ভার্চুয়াল টার্মিনাল উইন্ডোতে এক্স ক্লিক করার সময়

প্রথমে আপনাকে যা বুঝতে হবে তাbash হ'ল, আপনার ভার্চুয়াল টার্মিনাল এমুলেটরটি প্রক্রিয়াটি প্রস্থান করার সময় ধ্বংস করতে কোন ব্যবস্থার ব্যবহার করে ? - আপনি কোন সঠিক টার্মিনাল এমুলেটর ব্যবহার করছেন তার উপর এটি নির্ভর করবে।

কয়েকটি বিকল্প রয়েছে এবং সেগুলির মধ্যে ইউনিক্স সংকেত জড়িত ।

  • স্বাক্ষর, স্বাক্ষর, সাইনুইট: বাশ ইন্টারেক্টিভ মোডে এই সংকেতগুলির মধ্যে একটি গ্রহণ করলে ডিফল্ট আচরণ হ'ল এটি উপেক্ষা করা, তাই সম্ভবত এটি তা নয়।

  • সাইনআপ: এই সংকেতটি সাধারনত বাশকে নিখুঁতভাবে শেষ করে এবং ক্লিনআপ করায়, তবে আমি নিশ্চিত নই যে "ক্লিনআপ" ইতিহাসের ফাইলটি সংরক্ষণের সাথে জড়িত কিনা। এটা সম্ভবত না।

  • সিগ্কিল, সিগস্টপ: বাশকে ব্যবহারকারীর প্রক্রিয়া হিসাবে এই সংকেতগুলি উপেক্ষা করা অসম্ভব। কার্নেল এই সংকেতগুলি ব্যবহার করে যে কোনও সময় জোর করে হত্যা বা প্রক্রিয়াটি বন্ধ করতে পারে। আপনার ভিটি এমুলেটর যদি এর মধ্যে একটি প্রেরণ করে থাকে তবে আমরা এটিকে ফাঁদে ফেলতে পারি না এবং প্রস্থান করার আগে কিছু করতে পারি না, তাই আপনার ভাগ্য নেই।

কয়েকটি তথ্যসূত্র: সার্ভারফল্ট প্রশ্ন 337123

ইউনিক্স প্রশ্ন 6332

GNU ব্যাশ ম্যানুয়ালটিতে ইতিহাস ইন্টারেক্টিভভাবে ব্যবহার করা

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