.bash_profile, не полученный при выполнении su

Раскрашивает терминалы, определяются на двух шагах:

  • программа, работающая в терминале, говорит терминалу использовать определенный номер цвета;
  • терминал переводит каждый номер цвета в значение цвета.

Xterm имеет escape-последовательность для изменения значения цвета, связанного с номером цвета. Я не помню, поддерживает ли PuTTY эту последовательность; я знаю, что Mintty делает.

set_color_value () {
  printf "\\e]4;$1;$2\\a"
}
set_color_value 4 '#6495ed'  # set color 4 (blue) to CornflowerBlue

Эти настройки не переживут терминальный сброс. Можно преодолеть эту трудность путем добавления конфигурации курсора, изменяющей последовательность на строку сброса терминала.

  • В находящейся в terminfo системе с помощью ncurses, сохраните terminfo настройки терминала в файл с infocmp >>~/etc/terminfo.txt. Отредактируйте описание для изменения rs1 (основной сброс) последовательность, например, замена rs1=\Ec rs1=\Ec\E]4;4;#6495ed\E\\. С некоторыми программами и настройками, Вы, возможно, должны измениться rs2 (полный сброс) также. Затем скомпилируйте terminfo описание с tic ~/etc/terminfo.txt (это пишет в соответствии с каталогом $TERMINFO, или ~/.terminfo если сброшено).
  • В находящейся в termcap системе захватите termcap настройки от своей termcap базы данных (обычно /etc/termcap). Изменитесь is (основной сброс) и rs (полный сброс), упорядочивает для добавления настроек, например. :is=\Ec\Ec\E]4;4;#6495ed\E\\:. Установите TERMCAP переменная среды к отредактированному значению (начало и окончание :).

Теперь можно вставить что-то вроде этого Ваш ~/.profile:

if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
   [ "$TERM" = "xterm" ]; then
  set_color_value … # set color scheme
  TERMCAP=…  # if necessary
fi

41
17.07.2017, 19:10
3 ответа

Используя su без -l или - запускается bash как интерактивное, но оболочка невхода в систему, которая не читает ни из одного из файлов, которые Вы указали. Используйте -l или - опция или помещенный соответствующая конфигурация в /root/.bashrc.

Быстрая сводка файлов конфигурации:

  • Оболочка входа в систему (-l/--login) чтения /etc/profile во-первых, и затем первое это находит: ~/.bash_profile, ~/.bash_login, и ~/.profile.
  • Интерактивный, но оболочка невхода в систему (-i) чтения /etc/bash.bashrc и ~/.bashrc, в том порядке (если --rcfile опция используется и говорит этому смотреть в другом месте).
  • Неинтерактивные оболочки, например, запустился из другой программы, не используя -l или -i флаги, читает файл, указанный в BASH_ENV переменная среды.
  • Когда выполнено как sh как оболочка входа в систему, это будет читать /etc/profile и ~/.profile, в том порядке.
  • Когда выполнено как sh как интерактивный невход в систему, это читает файл, указанный в ENV.
61
27.01.2020, 19:35

Bash ведет себя по-другому в зависимости от того, если он полагает, что это - оболочка входа в систему, т.е. первая оболочка, выполненная, когда Вы входите в систему. Это только читает .bash_profile если это - оболочка входа в систему. Если Вы помещаете PATH- изменение кода в .bashrc вместо этого, это будет выполнено для всех интерактивных оболочек удара, не только войдет в оболочки.

5
27.01.2020, 19:35
[

] Если я использую окружение Gnome в Scientific Linux 6 (или предположительно RHEL 6), запустите терминал. Перейдите на вкладку [] Edit[] -> [] Profile Preferences[] -> [] "Title and Command"[] tab. Убедитесь, что флажок "Run command as a login shell" установлен. Я обнаружил, что терминальное приложение Gnome игнорирует мой [].bash_profile[], если я этого не сделаю.[

].
0
27.01.2020, 19:35

Теги

Похожие вопросы