Сохранить историю tcsh в нескольких окнах терминала

8

Как мы можем сохранить или поддерживать одну и ту же историю на нескольких терминалах?

Тот же вопрос, но для bash shell, обсуждался в ссылке ниже

Сохранить историю Bash в нескольких окнах терминала

дайте мне знать соответствующие настройки для оболочки tcsh?

user1228191
источник
Для получения дополнительной информации о tcsh history, см man tcsh. Поиск history -Sдолжен перейти к самой важной части.
Рэндалл

Ответы:

7

Эти переменные устанавливают историю для слияния вместо перезаписи, а не для сохранения дубликатов:

set history=1000
set histdup=erase
set savehist=(1000 merge)

секретный соус это линия:

alias precmd 'history -S; history -M'

который сохранит и объединит вашу историю перед печатью приглашения - т.е. после каждой введенной вами команды.

все вышеперечисленное должно быть добавлено в ваш файл .tcshrc .

Идан
источник
Когда я добавил это, alias precmd 'history -S; history -M'ничего не произошло, когда я написал какую-либо команду. Есть ли что-то еще, что должно быть сделано?
Айман Салах,
@AymanSalah, что происходит, не очевидно - это .historyфайл (или histfileзначение переменной оболочки, если установлено), записываемый на диск. Без установленного precmdпсевдонима файл ls -l .historyбудет отображаться .historyкак нетронутый. При precmd установке, как указано выше, ls -l .historyбудут отображаться обновленные временная метка и размер по мере их написания каждой командой.
Рэндалл
@Randall Спасибо, что указали на это. У меня были проблемы с сеансом оболочки. То, что вы говорите, на 100% правильно.
Айман Салах
1

В дополнение к ответу Идана , я хочу добавить, что alias precmd 'history -S; history -M'потенциально может испортить файл истории, поскольку он также записывает сигналы SIGINT и EOF (Ctrl + C и Ctrl + D).

введите описание изображения здесь

Лучшим способом было бы сохранить и объединить текущую историю оболочки после выполнения команды.

Вы можете достичь этого с помощью этой настройки ниже, так как tcsh не распознает SIGINT или EOF как допустимую команду.

alias postcmd       "history -S; history -M"
berong91
источник