Invoke zsh, затем * source * другой файл (при входе в интерактивный режим)

Этот вопрос, конечно, связан, но отличается от того, что он выполняет команду .

Решения для этих вопросов включают либо запуск подоболочки, что невозможно из-за необходимости источника, а не для выполнения – или изменения вашего ~/.zshrc , что невозможно, если вы хотите распространять скрипт, который это делает. (Или, скорее, изменение конфигурационных файлов пользователя – это то, чего вы просто не делаете)

Проблема в том, что с zsh нет параметра --init-file такого как bash (в первый раз когда-либо я видел bash с функцией, которой нет zsh)

Я дам ответ на свой вопрос, но он явно некрасиво, и я надеюсь, что кто-то знает трюк, чтобы обойти его!

Этот сайт говорит нам, что существует $ZDOTDIR , что делает очень уродливое решение возможным:

  1. /distdir/my-cmd :

    Используйте оболочки, предназначенные для замены файлов инициализации или неудачно безнадежно.

     case $(basename $SHELL) in zsh) OLD_ZDOTDIR="$ZDOTDIR" ZDOTDIR="/distdir" zsh -i ;; bash) bash --init-file "/distdir/.zshrc" -i ;; *) echo "Unrecognized shell $SHELL"; exit 1 ;; esac 
  2. /distdir/.zshrc :

    Именованный .zshrc , поскольку имена жестко закодированы в zsh, но bash может быть передан произвольно названный файл через --init-file . Можно также назвать это, например, our_stuff.sh , и создать .zshrc который содержит только что . ./our_stuff.sh . ./our_stuff.sh .

    Поскольку мы фактически не хотим заменять файлы init, но добавляем другой, мы должны тщательно воссоздать встроенную последовательность их поиска.

     # ignore profile, login & logout rc files, as we want no login shells case $(basename $SHELL) in zsh) test -f "$OLD_ZDOTDIR/.zshenv" && . "$OLD_ZDOTDIR/.zshenv" test -f "$OLD_ZDOTDIR/.zshrc" && . "$OLD_ZDOTDIR/.zshrc" ;; bash) test -f ~/.bashrc && source ~/.bashrc test -f /etc/bash.bashrc && source /etc/bash.bashrc ;; esac do_our_stuff! PS1="myenv! $PS1" #tell the user he's in a modified shell 
  • Zsh начинается невероятно медленно
  • PATH установлен до / etc / zshenv
  • Как сделать Ctrl-Z и bg одним нажатием клавиши, чтобы процесс продолжался в фоновом режиме?
  • Как добавить индикатор выполнения в сценарий оболочки?
  • Как использовать sudo с псевдонимом в zsh?
  • Как я могу выполнить рекурсивную поиск и замену из командной строки?
  • Пользовательская подсказка Tmux и ZSH: ошибка с именем окна
  • Файл трубопровода для команды, которая не реализует трубопроводы
  • ^ C не работает в zsh на Mac OSX
  • Завершение истории oh-my-zsh
  • Получить функцию в PS1 (Zsh)?
  • Давайте будем гением компьютера.