Я хочу изменить оболочку по умолчанию с tcsh на bash. Итак, я попытался, и вот что произошло:
>sudo chsh userid
Changing the login shell for userid
Enter the new value, or press ENTER for the default
Login Shell [/xhbin/tcsh]: /bin/bash
chsh: user 'userid' does not exist in /etc/passwd
Действительно, я не в / etc / passwd. Я не знаю почему.
Что я могу сделать?
Мой компьютер является частью сети, использующей распределенную аутентификацию, поэтому мои данные пользователя не будут отображаться в локальном файле / etc / passwd (но будут видны при использовании getent passwd userid). (спасибо @steeldriver) В моем случае я должен был выполнить chsh на основной машине.
Существует обходное решение для gnome-terminal
:
bash
как команда Custom (или fish
, или что-либо)Если вы хотите изменить оболочку для своего пользователя, вам не нужно становиться пользователем root. Просто введите:
chsh
без sudo
и без аргументов.
См. также man chsh
:
The chsh command changes the user login shell. This determines the name of the user's initial login command. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account.
Если вы используете аутентификацию LDAP с помощью PAM или чего-то еще, вы должны найти свой ответ на своем сервере LDAP, давайте настроим его для Microsoft AD, в этом случае ваша учетная запись домена не находится в / etc / passwd, когда вы входите в систему, но Вы можете увидеть свое свойство пользователя в AD, #getent passwd | grep user, если в конце он показывает, что ваша оболочка - / bin / csh, это потому, что в вашей AD есть атрибут для этого, так что если у вас есть учетная запись администратора в AD, вы можете исправить это самостоятельно, в противном случае просто скажите это своей AD администратора, чтобы включить расширенные функции на вкладке «Вид» пользователей и компьютеров Active Directory> свойства пользователя> атрибуты UNIX> измените оболочку входа на / bin / bash
, убедитесь, что вы не забыли: sudo / opt / pbis / bin / config LoginShellTemplate / bin / bash
, если вы использовали аналогичным образом или ...
сделано! http://fereidonian.net/?p=52
Если вы забыли свое имя пользователя, вы можете использовать команду whoami
, чтобы запомнить вас.
Итак, попробуйте:
sudo chsh $(whoami)
Если действительно, не существует строки, начинающейся с вашего имени пользователя в файле /etc/passwd
(что кажется необъяснимым), вы можете добавить новую, например :
username:x:1000:1000:your real name,,,:/home/username:/bin/bash
См. Также: Понимание формата файла / etc / passwd .
Если Вы пробуете к ssh в удаленный хост с пользователем домена, Вы не смогли изменять свою оболочку с помощью chsh
как @Masoud упомянутый. Но вот простое обходное решение для этого случая - каждый раз, когда Вы ssh в машину, сделайте это:
ssh my-host -t "zsh --login"
или
ssh my-host -t "cd /data/repos; zsh --login"
, Если Вы также хотите войти в систему непосредственно в другой рабочий dir
На моей машине используется аутентификация LDAP, и у меня нет доступа к серверу. Таким образом, мой обходной путь состоял в том, чтобы изменить переменную $SHELL на zsh в конце моего файла .bashrc.
$SHELL=/bin/zsh
$SHELL
Поэтому для меня, когда я открываю терминал, bash открывает zsh.