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


8

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


1
Яку систему університет використовує для зберігання облікових записів? ldapmodifyможе спрацювати.
користувач1686

Або, якщо вони використовують 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: Ага так, я спробував це зараз на хості з zsh як оболонкою за замовчуванням, і він не працює на обох -aі -l. Я видозмінюю приклад у своїй відповіді.
Даніель Андерссон

0

Найкраще рішення, яке я знайшов, було одне на stackexchange. Ось посилання stackexchange і ось рішення:

створіть .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.