Почему бы никому не установить «гистапенд» в bash?

36

После выяснения, что это shopt -s histappend значит , это кажется очень вменяемым, и я удивлен, что это не по умолчанию. Зачем кому-то хотеть стереть свою историю на каждом выходе оболочки?

tshepang
источник
Помимо неправильного понимания того, что делает эта опция - исправлено @maxscchlepzig - у «по умолчанию» есть как минимум два источника: bash«чистый» или поставляемый дистрибутивом .bashrc. для первого @Gilles, вероятно, правильно. в последнем смысле, -s histappend по умолчанию, например, в Debian, начиная с 2008 года: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d
3
Ну, Unix не совсем известен своими нормальными настройками? По умолчанию я ожидаю самых недружественных значений по умолчанию: P (незначительное преувеличение)
olejorgenb

Ответы:

34

Что ж, когда histappendне установлено, это не означает, что история стирается при каждом выходе из оболочки. Без histappendbash читает при запуске в память исторический файл - во время операции добавляются новые записи - и при выходе из оболочки последние строки HISTSIZE записываются в файл истории без добавления, то есть с заменой предыдущего содержимого.

Например, если в хронологическом файле содержится 400 записей, во время выполнения bash добавляется 10 новых записей - для гистсайта установлено значение 500, тогда новый исторический файл содержит 410 записей.

Такое поведение проблематично, только если вы используете больше экземпляров bash параллельно. В этом случае файл истории содержит только содержимое последней выходящей оболочки.

Независимо от этого: есть некоторые люди, которые хотят стереть свою историю при выходе из оболочки по причинам конфиденциальности.

maxschlepzig
источник
Кроме того, по соображениям безопасности может быть хорошей идеей не сохранять историю для пользователя root. Эта функция позволяет root иметь историю оболочки без сохранения на диск.
Мэй
1
+1 за "не означает, что история стирается при каждом выходе из оболочки". Это прекрасно объясняется в другом месте - но, возможно, недостаточно кратко, чтобы привлечь некоторых читателей, особенно в контексте названия опции (хорошо, я мог бы быть одним из тех читателей некоторое время). @ Мэй, какое отношение имеет любая перестановка histappendк тому root, достигает ли история диска? Опять же, это влияет только на то, что написано, а не если .
underscore_d
5
кто-нибудь запускает менее 2-х экземпляров bash? histappendа также HISTCONTROL=ignoredups:erasedups:ignorespaceкажется хорошим дефолтом для большинства людей.
дашесы
Является ли histappendэффект бессмысленным, если у меня есть HISTFILESIZE=и HISTSIZE=для бесконечной истории?
23 марта
1
@dashesy Лично я не люблю игнорировать / удалять повторяющиеся записи. У меня включен HISTTIMEFORMAT, и я хотел бы иметь возможность вернуться назад и посмотреть, когда я выполнил команду ... и, если я дал ее несколько раз, я хотел бы знать, когда была выпущена каждая из них. Это личное предпочтение, к которому свои. ;)
MSB
9

Для исторической совместимости, я думаю. histappendВариант не существовал до Баша 2.0.

Жиль "ТАК - прекрати быть злым"
источник
1
Была ли история перезаписана каждый раз?
Чепанг
3
@Tshepang: Да, так же, как сейчас, если вы не используете histappend.
Жиль "ТАК - прекрати быть злым"
это должно быть по умолчанию сейчас, но это не так
дашесы