Ответ 1
Я думаю, что вы просите что-то в этом направлении... непроверенный
#! /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
в первую строку (#!
). Это всего лишь способ указать, что оболочка должна работать в интерактивном режиме. Лучший способ добиться этого -
просто выполните script с помощью zsh -i my-script.zsh
, поскольку передача аргументов в команды #!
отличается от Linux и OSX, поэтому в принципе не стоит полагаться.
Честно говоря, почему бы вам не начать новую интерактивную оболочку, используя какую-то настраиваемую конфигурацию и (при необходимости) перехваты между командами? Лучший способ достичь этого - скорее всего, просто запустит новую оболочку, используя разные конфигурационные файлы, новую историю.
Это намного лучший способ сделать это:
mkdir ~/abc
echo "export HISTFILE=$HOME/.someOtherZshHistoryFile;autoload -U compinit; compinit" >! ~/abc/.zshrc
ZDOTDIR=~/abc/ zsh -i
вы можете изменить конфигурационный файл script для выполнения любой другой настройки, в которой вы нуждаетесь (разное приглашение цвета, отсутствие сохранения истории и т.д.).
Чтобы на самом деле делать что-то с пользовательским вводом, вы должны использовать один из многих крючков, обрабатываемых add-zsh-hook