Как мне изменить оболочку по умолчанию на bash, если у меня нет доступа ни к chsh, ни к / etc / passwd?


8

Я работаю над удаленной учетной записью Linux в университете, и, к сожалению, оболочка по умолчанию cshбез завершения табуляции. Как я могу изменить оболочку моей учетной записи по умолчанию bash? chshне доступен.


1
Какую систему использует университет для хранения учетных записей? ldapmodifyможет работать.
user1686

Или, если они используют NIS, ypchshдолжна быть правильная команда.
m000

Если вы просто хотите дополнить табуляцию, вы можете добавить их в ~ / .cshrc set filecи set autolist.
Хеннес

Ответы:


11

Вы, вероятно, должны попытаться спросить своих системных администраторов, могут ли они изменить вашу оболочку по умолчанию для вас. Если они не могут или не хотят (как в случае, когда я учился в колледже), я должен был добавить обходной путь

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

к .cshrc. (Конечно, обязательно замените /path/to/bashреальный путь. Это может быть даже версия, bashкоторая находится в вашем домашнем каталоге, если предоставленная системой версия слишком устарела на ваш вкус.) Для эффективности лучше сделать это уже в , .cshrcнасколько это возможно, с тем чтобы избежать дополнительной .cshrcобработки , которая станет спорными раз bashсменяет cshпроцесс.


Это не сработало для меня в моем университете. Мне, вероятно, придется поговорить с сисадмином.
2rs2ts

3

Вы можете просто связаться с

ssh -t yourhost bash

выполнить оболочку Bash автоматически при входе в систему.


Из комментариев ниже вы можете увидеть альтернативу

ssh -t yourhost exec bash

execзапустит новый процесс и выйдет из старого, поэтому cshпроцесс завершится напрямую.

Если -lв конце команды добавить в качестве аргумента Bash команду, она будет рассматриваться как оболочка входа, но, возможно, в этом нет необходимости.


1
ssh -t yourhost exec -a bash -l bashполностью заменить исходную оболочку, а не запускать как процесс внутри начальной оболочки.
Чепнер

@chepner: Интересно, я сам использую простое ssh -t host bashрешение в аналогичной ситуации, но ваш путь лучше. Я вообще не думал exec, спасибо! Я обновлю пост с вашим предложением.
Даниэль Андерссон

Однако мне стало немного по-другому, используя аргументы для bashвстроенной команды exec.
chepner

@chepner: Ах да, я попробовал это сейчас на хосте с zsh в качестве оболочки по умолчанию, и это не сработало на обоих -aи -l. Я изменю пример в своем ответе.
Даниэль Андерссон

0

Лучшее решение, которое я нашел, было одно на стеке обмена. Вот ссылка на стек, и вот решение:

создайте файл .profile в своем домашнем каталоге и вставьте следующее или добавьте в конец свой .profile, если он у вас уже есть.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

Я много искал, когда вы используете аутентификацию LADP через PAM, я думаю, что лучшее решение - поместить SHELL = / bin / bash exec / bin / bash в файл .profile в домашний каталог пользователя.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.