Чому хтось не встановить "histappend" в баш?


36

Дізнавшись, що це shopt -s histappend означає , це здається дуже розумним налаштуванням, і я здивований, що це не за замовчуванням. Чому хтось хоче стерти свою історію на кожному виході з оболонки?


окрім нерозуміння того, що робить цей варіант - виправлено @maxscchlepzig, - "за замовчуванням" має щонайменше два джерела: bash"чистий" чи "дистрибутив" .bashrc. для колишнього, @Gilles, ймовірно, правильний. в останньому сенсі, -s histappend це по умовчанням на, наприклад, Debian, починаючи з 2008 року: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d

3
Ну, а Unix не точно відомий розумними настройками за замовчуванням? Я очікував, що за замовчуванням будуть
найдружніші

Відповіді:


34

Ну а коли histappendне встановлено, це не означає, що історія стирається при кожному виході оболонки. Без histappendbash читає історфіл при запуску в пам'ять - під час роботи додаються нові записи - і при виході з оболонки останні файли HISTSIZE записуються у файл історії без додавання, тобто замінюючи попередній вміст.

Наприклад, якщо історіал містить 400 записів, під час виконання bash додається 10 нових записів - hISTize встановлюється в 500, то новий histfile містить 410 записів.

Така поведінка є проблематичною лише в тому випадку, якщо ви використовуєте більше екземплярів bash паралельно. У цьому випадку файл історії містить лише вміст останньої вихідної оболонки.

Незалежно від цього: Є деякі люди, які хочуть стерти свою історію при виході з оболонки через причини конфіденційності.


Також з міркувань безпеки може бути корисною ідеєю не зберігати історію для кореневого користувача. Ця функція дозволяє кореню мати історію оболонки, не зберігаючи її на диску.
Май

1
+1 для "не означає, що історія стирається при кожному виході оболонки". Це добре пояснюється в інших місцях - але, можливо, недостатньо лаконічно, щоб охопити деяких читачів, особливо в контексті назви варіанту (гаразд, я, можливо, був деякий час з цих читачів). @Mei, як будь-яка перестановка histappendмає будь-яке відношення до того, чи досягла rootісторія до диска? Знову ж, це впливає лише на те, що написано, а не якщо .
підкреслюй_

5
хтось працює менше ніж 2 екземпляри bash? histappendа також HISTCONTROL=ignoredups:erasedups:ignorespaceздається хорошим за замовчуванням для більшості людей.
тире

Чи histappendефективний безглуздий, якщо я маю HISTFILESIZE=і HISTSIZE=для нескінченної історії?
Марк.2377

1
@dashesy Я особисто не люблю ігнорувати / видаляти дублюючі записи. У мене ввімкнено функцію HISTTIMEFORMAT, і мені подобається мати можливість повернутися назад і побачити, коли я видав команду ... і якщо я її видав кілька разів, мені подобається знати, коли кожен був виданий. Це особисті переваги, до яких свої. ;)
msb

9

Для історичної сумісності, мабуть. histappendВаріант не існував до Баша 2.0.


1
Чи історію переписували щоразу?
thepang

3
@Tshepang: Так, зараз, якщо ви не використовуєте histappend.
Жил "ТАК - перестань бути злим"

це має бути зараз за замовчуванням, але це не так
тире
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.