Как мне изменить оболочку по умолчанию на 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.