Слово предупреждения: вопрос, который вы, похоже, задавали, вопрос, который вы хотели задать, и вопрос, который вы должны были задать, - это три разные вещи.
«Какую оболочку использует пользователь»неоднозначный.Ваша попытка выглядит так, как будто вы пытаетесь определить, какая оболочка выполняет ваш скрипт.Это всегда будет то, что вы положите в строку #!
сценария, если только вы не хотели, чтобы ваши пользователи редактировали этот сценарий, так что это бесполезно для вас.
Что вы хотели спросить, ядумаю, что это любимая оболочка пользователя.Это нельзя определить полностью достоверно, но вы можете охватить большинство случаев.Проверьте переменную окружения SHELL
.Если он содержит fish
, zsh
, bash
, ksh
или tcsh
, то любимой оболочкой пользователя, вероятно, является эта оболочка.Однако это неправильный вопрос для вашей проблемы.
Файлы типа .bashrc
, .zshrc
, .cshrc
и т. Д. Являются файлами инициализации оболочки.Они не являются подходящим местом для определения переменных среды.Переменная среды, определенная там, будет доступна только в терминале, где пользователь запускает эту оболочку, а не в программах, запускаемых из графического интерфейса.Определение также переопределит любую настройку, которую пользователь мог выполнить в подсессии.
Правильное место для определения переменной среды находится в файле запуска сеанса.Это в основном не связано с выбором оболочки пользователем.К сожалению, нет единого места для определения переменных среды.На многих системах ~/.profile
будет работать, но это не универсально.См. https://unix.stackexchange.com/questions/4621/correctly-setting-environment и другие посты, на которые я ссылаюсь, для более подробного обсуждения.