PS1 не устанавливает цвет - PullRequest
       1

PS1 не устанавливает цвет

0 голосов
/ 11 октября 2018

У меня есть переменная PS1 в файле bash_profile как

orange=$(tput setaf 166);
yellow=$(tput setaf 228);
green=$(tput setaf 71); 
white=$(tput setaf 15); 
bold=$(tput bold); 
reset=$(tput sgr0); 
PS1="\[${bold}\]"; 
PS1+="\[${orange}\]\u"; # username 
PS1+="\[${white}\]@"; 
PS1+="\[${yellow}\]\h "; # host 
PS1+="\[${green}\]\w"; # working directory 
PS1+="\[${white}\]\$ \[${reset}\]"; # '$' (and reset color) 
export PS1; 

Когда я открываю новый экземпляр терминала, он показывает все правильно, кроме цвета.PS1 set without color - new terminal instance

Но когда я выполняю команду

source .bash_profile

, цвет работает.Он исчезает, если я открываю новую вкладку.

source .bash_profile

Но, в новом экземпляре терминала, без выполнения команды источника, цвет работает для

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

[New terminal instance - without source- new PS1 variable[3]

В чем причина этого странного поведения?

Вкратце, в новом терминальном сеансе первый PS1 неотображает цвета, но второй ps1, помещенный в тот же файл bash_profile, отображает его.Но первый отображает цвета, когда он получен.

Примечание: я использую Mac.Я также уверен, что переменная устанавливается в bash_profile, но цвет не устанавливается.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Я подозреваю, что в случае ОП, все, что требуется, - это использовать ~/.bashrc вместо ~/.bash_profile.

Вот как все это работает:

Естьнесколько файлов, участвующих в настройке вашей среды bash.

/etc/profile устанавливает профиль всей системы

~/.bash_profile, ~/.bash_login, ~/.profile - они читаются по умолчаниюкогда bash вызывается как login shell

~/.bashrc - Это всегда читается, если bash не вызывается как sh или bash вызывается как bash --norc

~/.bash_logout - очистка оболочки входа

~/.inputrc - файл инициализации readline.

Какие файлы и порядок их чтения зависят от того, как именно вызывается bash.

Существует ряд случаев, не все из которых являются взаимоисключающими:

  • оболочка входа
  • интерактивная оболочка
  • не-интерактивная оболочка
  • режим posix
  • bash, вызываемый через stdin, подключенный к сетевому соединению (даон будет знать)
  • bash вызывается как sh
  • bash вызывается с эффективным uid / gid, отличным от реального uid / gid

Вам необходимо знать, какие случаи применяются к вашему вызову, чтобы определить, какие файлы будут прочитаны.

man bash и выполнить поиск вызова, чтобы получить точные сведения.

0 голосов
/ 03 января 2019

Я установил соляризованную цветовую схему / тему для своего терминала xterm-256.Это был тот, кто вызвал проблему.Когда я меняю цветовую схему, PS1 работает отлично.

0 голосов
/ 12 октября 2018

Вы должны исследовать немного больше (да, даже больше).

В каждом случае вы должны использовать printf "%q\n" "$PS1", чтобы увидеть точное значение переменной PS1 (с экранированными непечатными символами).Вы просто пытаетесь добавить цветов к уже установленной переменной PS1?Итак, если вы получите неокрашенный вывод, может ли это быть из-за того, что ваш код просто не был выполнен, поэтому исходное значение все еще установлено?Тогда только скрипт PROFILE не выполняется.

.bash_profile обычно выполняется только при запуске оболочки login .В настоящее время многие дистрибутивы не понимают этого правильно и полны обходных путей в этом вопросе, поэтому они часто содержат .bashrc файлы, исходные тексты которых .bash_profile находятся в их начале..bashrc получен для каждой новой оболочки, поэтому ваш .bash_profile также может быть получен для каждой оболочки.

Я мог бы догадаться, что ваши .bashrc первые источники .bash_profile и , затем устанавливает для PS1 значение, подобное вашему, только без цветов.Но, конечно, это догадки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...