Специализированная подсказка не содержит, когда дочерний удар, работал

Я изучал удар, и при выполнении, таким образом, я играл вокруг с .bash_profile файл, чтобы смочь поместить сообщения приветствия и т.д. Позже я просто удалил эти изменения. Но после реализации, что моя конфигурация по умолчанию подсказки потерялась: первоначально, подсказка была всем полужирным, и \w часть была синей так, чтобы, когда я был в глубоко вложенном каталоге, подсказка не казалась настолько запутанной. Я думаю, что это было значением по умолчанию для Ubuntu (исправьте меня, если я неправ), однако как я сказал, что это потерялось, и моя подсказка была неполужирной и монохроматическая получающийся в путанице, когда я нахожусь в длинных именованных каталогах.

Так, вчера вечером я пытался настроить свою подсказку способом, который я упомянул выше. Это работало много позже того, как я добавил код к .bash_profile

Код был похож на это:

export PS1="\[$(tput bold)\]\u@\h:\[$(tput sgr 0)\]\e[1;34m\w$ \e[m"

Однако, если я пытаюсь выполнить другую оболочку удара в текущей, подсказка становится бесформатной:

Это нормально? Разве смысл экспорта переменной не для создания этого доступным из всех дочерних процессов разветвленный от той оболочки? Почему это не делает, которые относятся к этой ситуации?

4
задан 21 August 2016 в 06:03

2 ответа

TL; DR: просто поместите вызов в PS1 в ~/.bashrc или назовите подоболочки с -l флаг

Ответ Zanna соответственно предлагает установить PS1 в ~/.bashrc быть полученным интерактивными оболочками.

Можно, однако, использовать -l отметьте для обработки подоболочки как оболочки входа в систему:

DIR:/xieerqi|04:25|skolodya@ubuntu:
$ echo "PS1='TEST$ '" > ~/.profile

DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash
xieerqi@eagle:~$ exit

DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash -l
TEST$ 

"Почему"

Это нормально? Разве смысл экспорта переменной не для создания этого доступным из всех дочерних процессов разветвленный от той оболочки? Почему это не относится к этому stiuation?

Да, это - ожидаемое поведение. При экспорте чего-то переменные должны распространить вниз к подоболочкам.

xieerqi@eagle:~$ export VAR=303
xieerqi@eagle:~$ bash
xieerqi@eagle:~$ echo $VAR
303
xieerqi@eagle:~$ ksh
$ echo $VAR
303

Проблема снова ~/.bashrc . Значение по умолчанию ~/.bashrc файл имеет строки, которые переопределяют PS1. Так, Ваша переменная экспортировалась, но затем uset однажды интерактивная полученная оболочка ~/.bashrc . Пример этой ситуации наблюдался ответом Gilles по одному из вопросов в Unix Stackexchange.

Что касается ~/.profile это на самом деле поощряется установить и экспортировать переменные среды оттуда и является частой практикой.

Для обращения к комментарию Zanna относительно того, почему самая первая оболочка действительно становилась цветной я полагаю, что это - причина:

Когда удар вызывается как интерактивная оболочка входа в систему... это сначала читает и выполняет команды из файла/etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема. (из страницы справочника удара, добавленный акцент)

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

5
ответ дан 23 November 2019 в 11:42

.bash_profile получен оболочками входа в систему только. Это было получено, когда Вы вошли в X-сессию и среду, наследованную, как @Serg объясняет подробно. Так или иначе Вы управляли конфигурацией, в которой эта среда не переопределяется .bashrc, возможно, устанавливая Ваш терминал для открытия оболочки входа в систему по умолчанию. Я могу воспроизвести поведение Вы испытанный путем конфигурирования моего терминала как это:

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

TL; DR
, Если Вы хотите, чтобы пользовательская подсказка была получена интерактивными оболочками, поместил код в Ваш .bashrc

6
ответ дан 23 November 2019 в 11:42

Другие вопросы по тегам:

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