2016-04-16 3 views
4

Как сообщить ZSH перезагрузить себя, как если бы это свежая вызывается оболочка, но без потери истории?Как перезагрузить файлы конфигурации ZSH без замены текущей оболочки?

Контекст для этого заключается в том, что я долгое время строю свою установку ZSH, и я бы не хотел ее потерять, если мой текущий компьютер выходит из строя, или диск поврежден и т. Д. ve поместил все мои локальные файлы конфигурации ZSH в репозиторий git. Пока ничего нового.

Но теперь я хочу добавить скрипт 'install' в репозиторий, чтобы облегчить процесс установки моей установки на новом компьютере. После того, как файлы установлены (на самом деле, символические ссылки, созданные в $ {ZDOTDIR- ~}, указывающие на файлы в репозитории), я хочу, чтобы сценарий перезагружал их, не заменяя текущий процесс с помощью exec (и, следовательно, теряя историю) и без поиска файлов один за другим (и рискуя тем, что я могу загрузить их в неправильном порядке или пропустить какую-то другую часть процесса запуска ZSH).

Есть ли какой-нибудь объект, встроенный в ZSH, или каким-то другим способом сказать ему перезагрузить все, как если бы это был только что запущенный экземпляр, сохраняя при этом историю команд?

EDIT: Hah. Разумеется, теперь я уничтожил свои .zshrc и .zlogin, хотя последнее не представляет больших трудностей (у него просто была установка RVM, которая легко восстанавливается). Первый, однако, болит. Любой, кто может сказать мне, как восстановить .zshrc из раковины, которая получила его, получает все мои бонусные очки. Разумеется, ответ на исходный вопрос будет по-прежнему отмечен как принятый.

У меня была проблема. Я написал сценарий оболочки. Now I have two problems :)

ответ

1

Вы можете включить опцию INC_APPEND_HISTORY. Из страницы руководства:

INC_APPEND_HISTORY

Эта опция работает как APPEND_HISTORY за исключением того, что новая история строки добавляются в $ HISTFILE пошагово (как только они введены), а не ждать, пока выходов оболочки , Файл будет по-прежнему периодически переписываться, чтобы обрезать его, когда количество строк в строке увеличивается на 20%, кроме значения, указанного в параметре $ SAVE- HIST (см. Также опцию HIST_SAVE_BY_COPY).

Таким образом, вы можете сделать exec $SHELL, не теряя истории.

+0

Это самое близкое, что я думаю, возможно, возможно, к тому, что я пытался сделать. Весьма признателен. –

5

Обычно это должно быть source .zshrc.

+0

Это не похоже на перезагрузку других файлов конфигурации. : -/Полный список, я думаю,/etc/zshenv, ~/.zshrc, ~/.zshenv, ~/.zprofile и ~/.zlogin, где '~' действительно $ ZDOTDIR или ~, если ZDOTDIR не задано. –

+0

ОК. Я удалю свой ответ, так как он не отвечает на ваш вопрос. :-) – kometen

+0

Как вам нравится. Я поддержал это, так как это * вообще полезная вещь, чтобы знать, и этот вопрос, вероятно, привлечет людей, для которых это окажется полезным. –