سؤال كيف: غير محدود باش / شل التاريخ؟


هل هناك طريقة لتحديد تاريخ غير محدود في باش؟


75
2018-05-04 12:01


الأصل




الأجوبة:


ضع هذا في .bashrc:

export HISTFILESIZE=
export HISTSIZE=

هناك تذهب ، تاريخ غير محدود. حاليا لدي 27000 مداخل :)

من "man bash":

إذا HISTFILESIZE لم يتم تعيين ، لا يتم إجراء اقتطاع.

وهذا يعني أن .bash_history لا يتم اقتطاعها أبدًا

كما يبدو أن الشيء نفسه ينطبق على HISTSIZE ، على الرغم من أني لم أستطع العثور على ما تم توثيقه.

ميزة أخرى رائعة سأجربها هي:

إذا كان HISTTIMEFORMAT يتم تعيين متغير ، وتكتب الطوابع الزمنية إلى ملف التاريخ ، مع وضع علامة تعليق التاريخ ، بحيث يمكن الحفاظ عليها عبر جلسات shell.

اسمحوا لي أن أعرف إذا كنت قد حاولت ذلك بالفعل ...


74
2017-07-22 09:45



لا يعمل هذا بالفعل في العديد من الحالات ولا يزال يتم حذف تاريخ bash. انظر جوابي أدناه للحصول على حل أكثر اكتمالا. - fotinakis
تحذير: هذا يسبب الصداع gdb. إذا قمت بتعيين HISTSIZE متغير سوف يأخذها ك 0 ، وبالتالي تعطيل حجم التاريخ بالكامل. - Matteo Italia
ملاحظات: لا تحتاج export، HISTFILESIZE في عدد الخطوط (وليس البايتات) ، وملف السجل يحدث اقتطاع عند تعيين متغير  HISTFILESIZE (وعندما يخرج قذيفة). لذا لا تضبطه مرتين في ملف التهيئة الخاص بك بقيم مختلفة ... - vaab
vaab: إذا لم أقم بتصدير HISTFILE ، لا يمكنني رؤية ما يستخدمه histofile الخاص بي "echo $ HISTFILE" في subshells ، لذلك في حين أنه ليس ضروريًا ، يمكن أن يكون مفيدًا ولا ضرر يمكنني اكتشافه. - Jeff Learman


(إعادة نشر جوابي من https://stackoverflow.com/a/19533853/128597)

بعد العديد من التكرارات الكبيرة والقبيحة والحالات الغريبة على مر السنين ، لدي الآن مقطع موجز من بلدي .باشرك مكرسة لهذا.

أولا ، يجب عليك التعليق أو قم بإزالة هذا القسم من .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 ٪٪" لتجنب كتابة السجل ، ستحتاج إلى إزالته يدويًا.

لاحظ أيضًا أن كل جلسة bash ستحمّل ملف السجل بالكامل في الذاكرة ، ولكن حتى إذا زاد حجم ملف السجل إلى 10 ميغابايت (والذي سيستغرق طويل طويل الوقت) لن تلاحظ الكثير من التأثير على وقت بدء bash.


37
2017-10-23 06:20



يتم اقتطاع ملف السجل عند التعيين HISTFILESIZE، ولهذا السبب يجب إزالة أي تواجد لمثل هذا الحدث باستثناء الحدث الذي تريده. سيتم اقتطاعها أيضًا على مخرج shell (لكن هذا متوقع). ويجب أن لا تحتاج export. - vaab
vaab إذا لم تقم بالتصدير ، قم بشيء مثل bash --norc سوف يقتطع التاريخ مرة أخرى. - Yongwei Wu
أنا أستعمل export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`" للحفاظ على تاريخ shell منفصل لكل جلسة (على أساس اسم المضيف واسم tty). بالطبع لا بد لي من إنشاء دليل ~ / hist الأول. - Jeff Learman
لاحظ أنك قد ترغب في التحقق من قيمة PROMPT_COMMAND وألا تضيف هذا بشكل متكرر بشكل أعمى حيث إنه سيؤدي أشياء مجنونة إلى نظامك. من المحتمل أن يكون البحث الفارغ أو الأفضل في البحث عن متغير التوسيع أكثر أمانًا. - dragon788
يمكنني استخدام هذا لتجنب قضية @ dragon788 المشار إليها: PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a"; - Brian Vandenberg


مشمول في ~ / .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.

نصائح لـ OSX (الطرفية)

في كل مرة يتم إنشاء علامة تبويب في المحطة الطرفية ، ~/.bash_profile يقرأ ، مما يعني أن bash لا يتابع قراءة ~/.bashrc. أضف السطر التالي إلى حسابك ~/etc/bash_profile:

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

نصائح للشاشة

إذا كنت تستخدم الشاشة ، فسيكون ملف التهيئة الخاص بك هو ~ / .screenrc. إذا كنت تريد أن تسجل الشاشة السجل ، فأنت تحتاج فقط إلى تعيينه لاستخدام shell تسجيل الدخول الذي سيصدر ملفات بدء تشغيل bash (ويسجل محفوظاتك).

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

8
2018-03-22 19:47





مفهوم مختلف (قد لا يكون قابلاً للتطبيق) ولكن يمكنك الحصول عليه unlimited التاريخ عند استخدام قذيفة بالوعة.


3
2018-05-04 12:35