вызовите zsh, выполнив его команда, и затем перейдите к интерактивному режиму вместо выхода

я хотел бы запуститься zsh подобный

zsh -c 'my_prog option1 option2'

но вместо того, чтобы выйти после выполнения той команды, оставляя меня в propt вызванного zsh (не везде, откуда это называют). один конкретный пример использования для этого находится в screenrc файлах, Вы могли сделать что-то как:

screen -t my_prog 0 zsh -c 'my_prog opt1 opt2'

и после выполнения той команды Вас оставляют с оболочкой там вместо него закрытие.

32
задан 06.01.2010, 00:48

3 ответа

Не то, чтобы я советовал бы делать это.

(sirius)~: zsh -c 'print hello; zsh -i'
hello
(sirius)~: echo $SHLVL
2

Существуют другие приемы, которые можно играть с экраном и использованием $STY переменная.

Если Вы хотите что-то выполненное от zsh с отдельными экранами, можно проверить переменную $STY в .zshrc или .zlogin. Это находится в формате <PID>.<TTY>.<HOSTNAME>.

if [[ -n $STY ]] then
  if [[ -f ~/.zsh-$STY[(ws:.:)2] ]] then
    . ~/.zsh-$STY[(ws:.:)2]
  fi
fi

Если на экране, и если ~/.zsh-<TTY> (от переменной $STY), существует, источник что, затем продолжите свой веселый путь. Можно также установить переменную среды прежде, чем назвать интерактивную оболочку.

> FOO=bar zsh -i
> env | grep FOO
FOO=bar

> RUNTHISCOMMAND=/path/to/script zsh -i
.zshrc:
if [[ -n $RUNTHISCOMMAND ]] then
   $RUNTHISCOMMAND
fi

Добавьте, что они зарегистрировались в Вашем .zshrc/.zlogin.

24
ответ дан 07.12.2019, 09:10

Что относительно добавления ; exec zsh к команде? Тем путем там является только одна оболочка, оставленная в конце.

6
ответ дан 07.12.2019, 09:10

Я нашел решение, которое работает без дополнительной оболочки здесь. Добавьте:

if [[ $1 == eval ]]
then
    "$@"
set --
fi

к .zshrc затем назовите zsh с

zsh -is eval 'your shell command here'

Действительно большой для запуска большого количества оболочек сразу.

14
ответ дан 07.12.2019, 09:10

Теги

Похожие вопросы