Я использую компьютеры моей школы и хотел бы использовать zsh
вместо bash
. Я хотел бы сделать его оболочкой по умолчанию, но я не могу выполнить команду, например, $ chsh -s $(which zsh)
потому что у меня нет прав администратора.
Есть ли способ, которым я могу вставить что-то в мой .bashrc
или что-то, что автоматически вызывает, zsh
когда это открывается как обходной путь?
Чтобы уточнить, zsh
уже установлен.
zsh
в.bashrc
файл. Выйдите из системы и войдите и все готово!zsh
на первую строчку?bash
вызывается явно. Лучше поместите это.bash_profile
вместо этого.Ответы:
Создайте
.bash_profile
в своем домашнем каталоге и добавьте эти строки:Обновление:
.profile
может работать как общее решение, если оболочка по умолчанию не bash. Я не уверен,.profile
что Zsh также может вызывать его, чтобы он стал избыточным, но мы можем сделать это безопасно с помощью простой проверки:Мы также можем использовать
which
для получения динамического пути,zsh
который зависит от значения$PATH
:источник
.bash_profile
не будет ссылки. Как насчет этого.profile
вместо этого?.profile
не сработал. Также не.profile
будет вызванZsh
? Это может стать излишним. Пока еще не проверил это. (Обновление: теперь это сработало, не знаю, какую ошибку я допустил раньше.) Есть мысли о возможных недостатках использования.profile
?.profile
если.bash_profile
они не существуют (если.bash_profile
, конечно, вы не получили их вручную ). В частности, Баш источников первая один из файлов [.bash_profile
>.bash_login
>.profile
] он находит. Он выглядит только.profile
как функция совместимости POSIX (Bourne shell).zsh
..bash_profile
и.profile
не работал (файлы даже не выполнялись, Fedora 26 на университетском компьютере).Обычно вы можете использовать
chsh
как пользователь без полномочий root. Но иногда он отключается, как правило, на сайтах, которые используют какую-либо форму сетевой базы данных пользователей, такую как NIS и LDAP. Вместо этого может бытьypchsh
(NIS) илиchsh.ldap
(LDAP).chsh
также, как правило, допускаются только некоторые утвержденные оболочки, как правило, те, которые перечислены в/etc/shells
.Если вы не можете использовать
chsh
или его варианты на своем сайте, тогда организуйте для вашей оболочки входаexec
вашу любимую оболочку и установитеSHELL
переменную так, чтобы она указывала на вашу любимую оболочку.Если ваш Логин оболочки
sh
,dash
илиksh
: файл , который нужно редактировать это~/.profile
. Помните, что этот файл читается в начале интерактивного сеанса, а также некоторыми неинтерактивными сценариями запуска сеанса (например, для сеансов X11), поэтому вам нужно позаботиться: только вызовexec
(который заменяет текущий процесс), когда текущий оболочка является интерактивной. За исключением оболочки Bourne (/bin/sh
для Solaris 10 и более ранних версий), вы можете сказать, что оболочка является интерактивной по наличиюi
в списке параметров ($-
).Если вы хотите, чтобы zsh прочитал ваш
.zprofile
, передайте-l
опцию.Если ваша оболочка входа в систему
bash
, вы можете продолжить, как указано выше. Или вы можете ввести эти команды~/.bash_profile
. Большинство сценариев запуска сеанса только читают~/.profile
и не читают~/.bash_profile
, но я видел некоторые, которые запускаются в bash и read.bash_profile
, поэтому даже там вы должны быть осторожны, чтобы не вызыватьexec
неинтерактивную оболочку.Если ваша оболочка входа - csh или tcsh, см. Пример в разделе Изменение оболочки по умолчанию без привилегий chsh или администратора.
источник
Я считаю, что команда,
chsh
для этой цели. Хотя я не уверен, что все дистрибутивы Linux / Unix поддерживают это. Проверьте справочную страницуchsh
.источник
passwd -s
.Если вы не можете запустить,
chsh
потому что у вас нет прав администратора, поговорите с кем-то, кто имеет .Скорее всего, вы не можете использовать его без
chsh
полномочий root, потому что система, которую вы используете, настроена так, чтоchsh
она не будет работать, например, потому что система использует NIS или LDAP, а не только/etc/passwd
файл. Или, возможно, администратор вашей системы просто хочет сохранить некоторый контроль.Процедура изменения вашей оболочки зависит от политики вашей организации. Может быть локальная команда, которая делает то, что
chsh
обычно делает. Или вам может потребоваться отправить запрос в службу поддержки с просьбой изменить оболочку.Большинство других ответов хороши, но если ваши администраторы достаточно отзывчивы, вы, возможно, не захотите взламывать сценарии запуска. Я, вероятно, просто вызову
zsh -l
вручную после входа в систему, пока администратор не сможет обновить мою учетную запись.Следует помнить еще одну вещь: иногда разные оболочки могут использовать одни и те же файлы запуска. Например,
sh
иbash
может одновременно выполнять$HOME/.profile
, иcsh
иtcsh
может одновременно выполнять$HOME/.login
и$HOME/.cshrc
(хотя оболочки конкретные файлы запуска нравится.bashrc
,.bash_profile
и.tcshrc
могут переопределять). Если ваша оболочка по умолчанию установлена/bin/csh
и вы хотите ее использовать/bin/tcsh
, обновление.login
для вызова/bin/tcsh -l
может создать бесконечный цикл.zsh
случайно неbash
запускаются специфичные файлы запуска, так что это не проблема для вас.Большинство снарядов установить переменные , которые определяют , какую оболочку вы используете (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Если вы собираетесь написать код запуска, чтобы вызвать предпочитаемую оболочку, неплохо было бы заключить его в оболочку,if
чтобы он выполнялся только в том случае, если эта оболочка еще не запущена. Используя код из ответа konsolebox :(Добавленная сложность проверки,
"${ZSH_VERSION:-unset}"
а не просто"$ZSH_VERSION"
возможность, которую вы сделалиset -o unset
, опция, которая приводит к ошибке ссылки на неопределенную переменную.)источник
Я могу придумать несколько сценариев.
zsh
отсутствует/etc/shells
, и OP желает использовать его без необходимости вводаzsh
в командной строке. Возможные решения.а) использовать трюки профиля, чтобы выполнить его при входе в систему. Это так же эффективно, как и реальная смена оболочки.
б) просить администратора , чтобы добавить
zsh
к/etc/shells
так что вы можетеchsh
к немув) попросить администратора изменить вашу оболочку. это не разумно, потому что это лишит вас возможности
ftp
. Вы можете использовать толькоftp
если у вас есть оболочка в/etc/shells
пользователь хочет избежать ограниченной оболочки, скорее всего
rbash
илиrsh
.Если
.profile
это редактируемый, егоPATH
можно расширить, отредактировав его. После/bin
того, как вы попали в путь, вы можете начатьbash
изнутриrsh/rbash
, получив доступ кchsh
команде, чтобы позволить вам менять оболочки. Многие команды имеют экранирование оболочки, которое можно использовать для экранирования ограниченной оболочки и восстановления доступа к немуchsh
.chsh
на самом деле не работает по какой-то другой причине. Решение а из возможности 1 также является ответом здесь.Сценарий 2 является единственной причиной для фактического изменения оболочки по умолчанию (это слишком ограничительно).
источник
Я не думаю, что приведенный ответ на самом деле делает
zsh
оболочку по умолчанию. Он просто меняет оболочку на zsh, как только пользователь входит в свою оболочку по умолчанию . Пользователь по-прежнему будет входить в систему,DEFAULT SHELL
но при этом оболочка изменится наzsh
Чтобы изменить оболочку по умолчанию, используйте:
Вы должны быть пользователем root, чтобы сделать это.
В противном случае вышеуказанный обходной путь пригодится.
Добавлено из комментария
и он может быть вызван пользователем для себя.
источник
chsh -s /path/to/zsh
является более стандартным и обычно (но не всегда) не требует root-доступа, в отличие от того,usermod
который всегда есть. Таким образом, ваш ответ имеет больше проблем, чем то, что вопрос уже утверждает, что не работает.