Змініть оболонку sudo su


13

Щоразу, коли я біжу sudo suвід свого звичайного zsh(який використовує рамку oh-my-zsh ), я змушений використовувати стару оболонку Bourne ( sh) за замовчуванням (очевидно, це стандартна поведінка у більшості * nix-подібних систем). Якщо я біжу zshзсередини shпісля запуску sudo su, я отримую оболонку Z, але без поліпшень від о-мі-зш.

Чи є спосіб змінити sudo suзапуски оболонки на zsh? Якщо так, то чи можна також використовувати цей екземпляр zshзапуску oh-my-zsh?

Я використовую OS X 10.8.4.

Відповіді:


21

Ще один спосіб виконання інтерактивної оболонки як суперпользователя sudo -s, який використовується $SHELLяк оболонка.

Як зазначаються в коментарі до іншої відповіді, su -s /path/to/zshв OS X не працює.

OS X не підтримує зміну оболонок входу в /etc/passwdбудь-який, але ви можете використовувати dscl:

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/shвже не оболонка Bourne на більшості платформ. Це сумісна з POSIX версія bash в OS X і тире в Ubuntu.


Це те, що я думаю, що питання хотілося. Це напевно те, що працювало для мене; Дуже дякую! редагувати Я бачу, що він хотів зараз - я не думаю, що це те, чого він хотів, тому я не можу справедливо підкреслити це питання, але я думаю, що ти все-таки заслуговуєш на медаль. Ви мали відповідь на моє запитання!
Wyatt8740

4

На сторінці сторінки suє два способи досягти цього.


Перший метод - просто використовувати -sабо --shellпрапор (якщо припустимо, що ви використовуєте * ОС на основі NIX з версією, suяка підтримує цей аргумент), а потім шлях до обраної оболонки. Якщо передану оболонку неможливо знайти, suповертається до наступного методу і, якщо цього не відбувається, спробує викликати /bin/sh.

Наприклад, ви можете змусити suзапустити zsh(припустимо, що він існує в /bin/zsh) як:

sudo su --shell /bin/zsh

Другий метод - це зміни оболонки за замовчуванням, визначеної для rootкористувача ( будьте уважні! ). Це можна зробити, відредагувавши файл /etc/passwdта змінивши оболонку, вказану для rootкористувача. Щоб побачити, яка оболонка вказана за замовчуванням, ви можете запустити таку команду (якщо припустити, що суперпользователь є кореневим):

sudo grep root /etc/passwd 

Команда повинна виводити щось на кшталт root:x:0:0:root:/root:/bin/bash. Ви можете просто змінити /bin/bash(або все, що встановлено у вашій системі), щоб вказати на zshнього.


3
Як завжди, будьте уважні до зміни оболонки кореня. Ви не хочете бути в режимі одного користувача та мати кореневу оболонку, яка потребує / usr, коли вона порушена. В оренді переконайтеся, що у вашої нової оболонки немає більше залежностей від файлової системи, ніж та, яку ви замінюєте
Rich Homolka

Запуск sudo su -s /bin/zsh(або використання --shell) повернення su: illegal option -- s. Я в ОС X 10.8.4; OS X приймає іншу команду?
Жуль

@JulesMazur, що таке вихід cat /etc/shells? Технічно будуть запущені лише оболонки, дозволені в цьому файлі, хоча на сторінці suвказується, що це не має значення, якщо suвін викликається коренем: S
Прорив

cat /etc/shellsповертається /bin/zshяк прийнятна оболонка.
Жуль

2
@JulesMazur, будь ласка, не забудьте завжди включати вашу ОС, щоб уникнути подібної плутанини.
тердон

1

Більш чистий спосіб, який також захистить вашу систему у випадку, якщо ваша спеціальна оболонка підірвана, - це створити .profile в домашній каталог root w /:

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

Просто змініть шлях до оболонки, яку ви хочете, а не bash.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.