Я думаю, вы просите что-то в этом роде... не проверено
#! /bin/zsh -i
local HISTFILE
# -p push history list into a stack, and create a new list
# -a automatically pop the history list when exiting this scope...
HISTFILE=$HOME/.someOtherZshHistoryFile
fc -ap # read 'man zshbuiltins' entry for 'fc'
while IFS="" vared -p "input> " -c line; do
print -S $line # places $line (split by spaces) into the history list...
done
[EDIT] Обратите внимание, что я добавил -i
в первую строку (#!
). Это просто способ указать, что оболочка должна работать в интерактивном режиме. Лучший способ добиться этого — просто выполнить сценарий с помощью zsh -i my-script.zsh
, потому что передача аргументов командам #!
различается между Linux и OSX, поэтому в принципе на это не следует полагаться.
Честно говоря, почему бы вам просто не запустить новую интерактивную оболочку, используя некоторую пользовательскую конфигурацию и (если это необходимо) перехватчики между командами? Лучший способ добиться этого, вероятно, просто запустить новую оболочку, используя другие файлы конфигурации и новую историю.
Это гораздо лучший способ сделать это:
mkdir ~/abc
echo "export HISTFILE=$HOME/.someOtherZshHistoryFile;autoload -U compinit; compinit" >! ~/abc/.zshrc
ZDOTDIR=~/abc/ zsh -i
затем вы можете изменить файл конфигурации скрипта, чтобы выполнить любую другую настройку, которая вам нужна (другая цветовая подсказка, без сохранения истории и т. д.).
Чтобы на самом деле что-то делать с пользовательским вводом, вы должны использовать один из многих хуков, обрабатываемых add-zsh-hook
.
person
Francisco
schedule
08.09.2015