Изменение переменной среды в оболочке, но не экспорт - PullRequest
1 голос
/ 06 января 2020

У меня проблемы с установкой постоянных переменных среды в моей оболочке. Например,

HISTSIZE=0
export HISTSIZE
echo $HISTSIZE

Переменная изменится в оболочке. Но если я открою другую вкладку или закрою и снова открою оболочку, переменная вернется к исходному значению 1000.

Я также попытался получить переменную с помощью скрипта, написанного в ~ / .bash_profile. Но он оставляет ту же проблему переменной, работающей только в этой указанной c оболочке. Как я могу создать постоянное изменение?

Ответы [ 3 ]

4 голосов
/ 06 января 2020

Если вы открываете новую вкладку, родительский процесс новой оболочки - это не ваша текущая оболочка, а ваш эмулятор терминала, поэтому экспорт HISTSIZE не влияет на среду новой оболочки.

Поскольку HISTSIZE используется только самой оболочкой, его вообще не нужно экспортировать. Установите его значение в .bashrc, чтобы любая новая интерактивная оболочка получала инициализированное значение.

HISTSIZE=0

Если ваш эмулятор терминала настроен на запуск оболочки входа в систему (обычно в macOS, я полагаю, гораздо меньше в Linux), .bashrc не будет использоваться. В таком случае я рекомендовал добавить . .bashrc в самый конец вашего .bash_profile, чтобы интерактивная оболочка входа в систему инициализировалась так же, как и интерактивная оболочка без входа в систему.

2 голосов
/ 06 января 2020

Некоторые эмуляторы терминала не запускают новые вкладки в качестве оболочки для входа. Например, в терминале Gnome Вам необходимо:

  1. Элемент списка
  2. Go для редактирования -> Параметры профиля.
  3. Выбрать вкладку «Заголовок и команда». Обратите внимание, что флажок «Выполнить как оболочка входа» снят! Проверьте это.

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

Чтобы сделать его несколько постоянным Вы должны добавить его, например, к .bashrc

Заметьте :

Конфигурационные файлы оболочки, такие как ~ / .bashr c, ~ / .bash_profile и ~ / .bash_login часто предлагаются для установки переменных среды. Хотя это может работать в оболочках Bash для программ, запускаемых из оболочки, переменные, установленные в этих файлах, по умолчанию недоступны для программ, запускаемых из графической среды в сеансе рабочего стола.

Цитируется из Справки Ubuntu .

Поэтому, чтобы решить, где его добавить, прочитайте руководство по эксплуатации

0 голосов
/ 07 января 2020

Посмотрите на справочную страницу bash: .bash_profile только для интерактивных оболочек входа в систему. Если это интерактивная оболочка без регистрации, вместо нее обрабатывается .bashrc.

Я предлагаю поместить те настройки, которые должны быть выполнены в каждой интерактивной оболочке, в отдельный файл (скажем: ~/.bash_interactive) и источник этот файл из .bash_profile и .bashrc.

...