sudo и #

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
skeletor
Сообщения: 1224

sudo и #

Сообщение skeletor »

Поставил себе sudo, но при выполнении sudo -s знак с $ не меняется на #. Хотя при переключении через su $ меняется на #. Настройки профиля не менял (ни в /etc ни в home юзера). Видимо это траблы самого sudo. Как сделать что бы после переключение на root'a знак $ менялся на #?

Пробовал делать так:

Код: Выделить всё

if [ "`id -u`" -eq 0 ]; then
        PS1='\u@\h:\w\# '
else
        PS1='\u@\h:\w\$ '
fi


но ничего не выходит.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: sudo и #

Сообщение Rootlexx »

(man sudo) писал(а):...
-i
The -i (simulate initial login) option runs the shell specified in the passwd(5) entry of the user that the command is being run as. The command name argument given to the shell begins with a -
to tell the shell to run as a login shell.
...
-s
The -s (shell) option runs the shell specified by the SHELL environment variable if it is set or the shell as specified in passwd(5).
...

То есть при использовании параметра "-s" оболочка запускается не как оболочка логина в отличие от параметра "-i". Теперь смотрим:
(man bash) писал(а):...
INVOCATION
...
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.
...
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists.
...

А теперь вспоминаем, где именно устанавливается переменная PS1, и понимаем, в чём здесь дело, почему это не ошибка sudo, и какой параметр нужно использовать для достижения желаемого результата.
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: sudo и #

Сообщение skeletor »

Ну так всё верно: нужно использовать -s, а не -i. Прописываю я в файле ~/.profile. В итоге - ничего.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sudo и #

Сообщение /dev/random »

skeletor писал(а):
17.09.2010 16:57
Ну так всё верно: нужно использовать -s, а не -i. Прописываю я в файле ~/.profile. В итоге - ничего.

А теперь читаем _внимательно_.
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: sudo и #

Сообщение skeletor »

Читал я. А теперь давайте вместе почитаем и попробуем понять, кто где ошибся. Укажите, в чём я ошибся. Я понял именно так, как написал выше.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: sudo и #

Сообщение t.t »

Не совсем понятно, что Вам объяснить. Перевести на русский язык приведенные цитаты?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: sudo и #

Сообщение Rootlexx »

skeletor писал(а):
18.09.2010 16:50
А теперь давайте вместе почитаем и попробуем понять, кто где ошибся. Укажите, в чём я ошибся.

Rootlexx писал(а):
17.09.2010 16:16
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists.

Перевод:
Когда запускается оболочка, не являющаяся оболочкой логина, в интерактивном режиме, она читает и выполняет команды из ~/.bashrc, если этот файл существует.

Именно так запускается оболочка при вызове sudo с параметром "-s".
Вы записываете нужные вам команды в ~/.profile, который не исполняется при таком запуске оболочки. Вас удивляет, что:
skeletor писал(а):
17.09.2010 16:57
В итоге - ничего
?
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: sudo и #

Сообщение skeletor »

Всем спасибо, проблема заключалась в том, что блок if был прописан 2-ды: в .profile и в .bashrc. Оставил в .profile и всё заработало.
Спасибо сказали: