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

1

Я использую расширение "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 пользователь
Уэйн Молина
источник

Ответы:

2

Вернувшись к 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 «по умолчанию», а не с моим расширенным.
Уэйн Молина
Я попробовал обе команды, которые вы опубликовали, rcs "выключен" и ZDOTDIR пуст.
Уэйн Молина
Вы имеете в виду, что видите norcs off(что является значением по умолчанию и означает, что ваши файлы 'rc' должны использоваться)? Эхо отладки, которое вы вводите, основываясь на ответе Райана, также, кажется, указывает, что norcsэто отключено для вашего случая «Новая вкладка» / «Новое окно». Я просто хотел уточнить, поскольку «rcs выключен» на самом деле является противоположностью «norcs выключен».
Крис Джонсен
2

Я не слишком много знаю о том, как 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)
Крис Джонсен
Я сделал эхо, и оно было выведено правильно, когда я загрузил новую командную строку. Он также запускается, когда я набираю команду "zsh", поэтому она загружается, но по какой-то причине расширенное приглашение не появляется, пока я не наберу zsh вручную
Уэйн Молина,
Ну, на самом деле у меня нет Mac, поэтому я не могу помочь вам с странностями, характерными для Mac. Только общая странность и, возможно, специфическая для Zsh странность.
Райан Томпсон
1

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

Anark
источник
0

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

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

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

Положил:

echo $HOME
echo $ZSH
Деннис Уильямсон
источник