2016-05-17 4 views
0

Я пытаюсь посмотреть, что будет выводить команда, если бы я был в оболочке входа, без необходимости входить в оболочку входа. Я пробовал несколько вариантов:Запуск команды в качестве оболочки входа без запуска новой оболочки?

zsh --login -c "alias" 

Но ни одна из моих псевдонимов не показана; --login и -c несовместим?

+1

Завершите ли ваши файлы входа раньше (перед установкой псевдонимов), если оболочка не является интерактивной. Он может работать, но вы не устанавливаете псевдонимы, поэтому вы не можете их использовать. Попробуйте добавить '-x' в командную строку (до' -c'). –

+0

Пробовал '-x', тот же результат –

+0

Хорошо; он самосогласован. Вы видели, как ваши псевдонимы установлены? Был ли '/ etc/zprofile' прочитан? Был ли прочитан какой-либо другой подобный файл? –

ответ

0

Чтобы проверить разницу между zsh --login -c "alias" и обычной оболочкой входа, вы можете/должны добавить опцию -x, чтобы увидеть, что такое оболочка.

Когда я запустил zsh -x --login -c "alias", он обрабатывает /etc/zprofile.

Когда я запустил zsh -x --login, он обрабатывает /etc/zprofile и /etc/zshrc.

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

Я создал тривиальные версии этих файлов:

$ echo "echo in .zprofile" > ~/.zprofile 
$ echo "echo in .zshrc" > ~/.zshrc 

и конечно, они обрабатываются. Кроме того, команда -c с --login обработала .zprofile, но не обработала файл .zshrc.

Таким образом, используя -c "alias" после --login, подавляет обработку /etc/zshrc и ~/.zshrc. Если вы хотите, казненных даже так, что вам нужно использовать что-то вроде:

zsh --login -c "[ -f /etc/zshrc ] && . /etc/zshrc; [ -f ~/.zshrc ] && . ~/.zshrc; alias" 

Использование -x для обработки отладки входа часто информативными.

Приятно, что современные оболочки предоставляют возможность командной строки, чтобы вызвать обработку входа в систему. У меня все еще есть программа (которую я больше не использую), которая запускает оболочку входа старомодным способом, добавляя - до имени оболочки в argv[0]. Таким образом, запуск -ksh приведет к обработке входа в систему; программа login запускает оболочку входа с - в начале.

Смежные вопросы