Использование расширений zsh - почему я должен вручную набирать «zsh», чтобы он появился?

2722
Wayne Molina

Я использую расширение "oh-my-zsh" Робби Рассела на OSX 10.5 Leopard. Однако я нахожу, что он не загружается по умолчанию. Когда я запускаю новый терминал, он использует приглашение ZSH «по умолчанию», и я должен вручную ввести «zsh» и нажать Return, чтобы получить «расширенное» приглашение. Мой .zshrcфайл перечисляет путь ZSH как указывающий на каталог oh-my-zsh:

Это очень раздражает, потому что каждый раз, когда я открываю новую вкладку, мне приходится снова вводить zsh (кроме того, можно ли получить новую вкладку, чтобы запомнить мой текущий рабочий каталог? Я в основном пишу приложения на Rails, поэтому у меня будет 2 -3 окна открываются внутри одной и той же директории, и это огорчает необходимость каждый раз возвращаться в нее). Есть ли простой способ автоматически запустить oh-my-zsh при открытии терминала, чтобы мне не приходилось каждый раз вводить zsh?

РЕДАКТИРОВАТЬ

Я автоматически установил oh-my-zsh, следуя инструкциям Робби на Github, так что вот .zshrc, который он создал для меня:

# Path to your oh-my-zsh configuration. export ZSH=$HOME/.oh-my-zsh  # Set to the name theme to load. # Look in ~/.oh-my-zsh/themes/ export ZSH_THEME="maran"  # Comment this out to disable weekly auto-update checks # export DISABLE_AUTO_UPDATE="false"  source $ZSH/oh-my-zsh.sh  # Customize to your needs... export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr /local/bin:/usr/X11/bin:/usr/local/git/bin export GIT_EDITOR="mate -w" 

Я попытался изменить оболочку по умолчанию, чтобы указать на это, но затем я получаю сообщение об ошибке, говорящее, что она установлена ​​в недопустимую переменную Переменная $ HOME правильно указывает на мой домашний каталог, но, похоже, она не загружается, пока я не наберу zsh в терминале, когда у меня появляется обычное приглашение zsh.

РЕДАКТИРОВАТЬ

Вот вывод pstree -wp $$

- + = 00001 root / sbin / launchd \ - + = 00066 waynemolina / sbin / launchd \ - + = 68844 waynemolina /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_704684 \ - + = 68845 root-логин -pfq waynemolina / bin / zsh \ - + = 68846 Waynemolina -Zsh \ - + = 68939 waynemolina pstree -wp 68846 \ --- 68940 root ps -axwwo пользователь 
1

4 ответа на вопрос

2
Chris Johnsen

Вернувшись к 10.4, Терминал предпочитает «При создании нового окна Терминала» использовать /usr/bin/loginили разрешать пользователю указывать команду. Я ожидаю, что Терминал в 10.5 имеет нечто подобное.

У вас есть что-то вроде zsh -fуказанной команды вместо использования /usr/bin/loginили вызова zsh без -f? -fОпция заставит ЗШ игнорировать все загрузочные файлы, кроме /etc/zshenv(т.е. он будет игнорировать ваши ~/.zshrc).

Другой способ проверить этот параметр может быть с defaults read com.apple.Terminal Shell. Если он показывает какой-то вывод, у вас есть пользовательские настройки. Если оно пустое или не существует, вы, вероятно, все еще используете значение по умолчанию /usr/bin/login.

Отредактировано, чтобы добавить:
В одной из ваших оболочек с приглашением по умолчанию (новое окно терминала или вкладка), проверьте следующее:

  • set -o | fgrep rcsПоказывает ли «вкл.» Для norcs?
  • Что- [[ "$ZDOTDIR" -ef "$HOME" ]] || echo "ZDOTDIR=$ZDOTDIR"нибудь показывает?

Если одно или оба из этих условий выполняются, вам необходимо отследить, где они устанавливаются. Обратите внимание, что norcsможет быть установлено с любым из set +o rcs, set -o norcs, setopt norcs, unsetopt rcs, или set -f. Кроме того, имена опций не чувствительны к регистру и могут иметь подчеркивание, вставленное где угодно ( NO_rC___sаналогично norcs). Посмотрите на /etc/zshenv, /etc/zprofile, /etc/zshrc, /etc/zlogin; и .zshenv, .zprofile, .zshrc, и .zloginиз каталога ZDOTDIR.

Также может быть полезно знать полное происхождение ваших оболочек «приглашения по умолчанию» ( pstree -wp $$если вы используете pstree(например, MacPorts ). Возможно, обычный процесс 'rc' прерывается чем-то вроде zsh -fфайла 'rc'.

Он использовал / usr / bin / login в соответствии с настройками, но я изменил его на / bin / zsh, и он по-прежнему работает с приглашением zsh «по умолчанию», а не с моим расширенным. Wayne Molina 15 лет назад 0
Я попробовал обе команды, которые вы опубликовали, rcs "выключен" и ZDOTDIR пуст. Wayne Molina 15 лет назад 0
Вы имеете в виду, что вы видите `norcs off` (который используется по умолчанию и означает, что ваши файлы 'rc' должны использоваться)? Эхо отладки, которое вы вводите на основе ответа Райана, также, по-видимому, указывает на то, что `norcs` отключен для вашего случая« Новая вкладка »/« Новое окно ». Я просто хотел уточнить, поскольку «rcs выключен» на самом деле является противоположностью «norcs выключен». Chris Johnsen 15 лет назад 0
2
Ryan Thompson

Я не слишком много знаю о том, как Mac OS X работает с оболочками, но в целом я нахожу полезным разбрасывать некоторые операторы echo вокруг моих файлов инициализации, чтобы убедиться, что они получены. Итак, в вашем файле .zshrc вы можете поместить строку с надписью echo "Loading .zshrc". И так далее. Наличие или отсутствие этих эхо-операторов при запуске новой оболочки (или открытии новой вкладки) должно помочь вам диагностировать проблему.

Что касается проблемы с изменением каталога, есть два возможных решения:
1. Используйте экран и забудьте о вкладках.
2. Напишите функцию для отображения текущего каталога в каком-либо файле, затем поместите эту функцию в ваш precmd, а затем добавьте строку в .zshrc для чтения этого файла и cd в него. Чтобы быть более конкретным (но не проверено!):

PWD_SAVE_FILE="$HOME/.pwd_save" function savepwd { pwd > "$PWD_SAVE_FILE" }  function precmd { savepwd }  cd "`cat "$PWD_SAVE_FILE"`" 
+1 для техники «эхо-отладки»; просто обязательно удалите их (или закомментируйте), когда закончите, иначе вывод эха из неконтролируемых файлов 'rc' (.zshenv, .zshrc и глобальных эквивалентов) может сбить с толку инструменты, которые ssh-in и напрямую запускают команды (например, rsync, git) Chris Johnsen 15 лет назад 0
Я сделал эхо, и оно было выведено правильно, когда я загрузил новую командную строку. Он также запускается, когда я набираю команду "zsh", поэтому она загружается, но по какой-то причине расширенное приглашение не появляется, пока я не наберу zsh вручную Wayne Molina 15 лет назад 0
Ну, на самом деле у меня нет Mac, поэтому я не могу помочь вам со странностями, характерными для Mac. Только общая странность и, возможно, специфическая для Zsh странность. Ryan Thompson 15 лет назад 0
1
Anark

У меня была эта проблема. Это было из-за наличия .zlogin в моем домашнем каталоге. Как только я удалил .zlogin ой мой зш работал

0
Dennis Williamson

Попробуйте поместить это в свой ~/.zshrcфайл для целей отладки:

Сразу после этой строки:

export ZSH=$HOME/.oh-my-zsh 

Положил:

echo $HOME echo $ZSH