Работа с экспортом странного поведения PATH CentOS

Я пытаюсь изменить переменную PATH в двух разных сценариях, расположенных в /etc/profile.d/

Перезагружая CentOS и проверяя переменную PATH (отредактированную), $ PATH изменяется дважды!

 []$ echo $PATH /usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin: /usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin: /usr/local/php/bin []$ 

В корневом режиме:

 []$ su Password: []# 

$ PATH изменяется 3 раза!

 []# echo $PATH /usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin: /usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin: /usr/local/php/bin:/usr/local//mysql/bin:/usr/local/php/bin []# 

Почему он не назначается только один раз?

2 Solutions collect form web for “Работа с экспортом странного поведения PATH CentOS”

Вот исправление: замените содержимое файла /etc/profile.d/php.sh :

 pathmunge /usr/local/php/bin after 

и аналогично для файла /etc/profile.d/mysql.sh :

 pathmunge /usr/local/mysql/bin after 

Объяснение состоит в том, что файлы в файле /etc/profile.d/*.sh получены из файла /etc/profile (который сам по себе используется оболочкой bash для входа в систему).

Поскольку файлы получены, они являются частью /etc/profile поэтому они могут использовать любые переменные и функции в этом файле. pathmunge – такая функция (в моей федерации 20 в любом случае), единственной целью которой является добавление нового каталога в PATH , но только если он еще не существует. Ключевое слово after добавляет новый каталог в конец PATH .

Следовательно, у вас не будет дубликатов. Однако я не знаю, почему у вас их есть.

Это происходит потому, что что-то в вашей конфигурации загружает /etc/profile несколько раз. Вам нужно найти его и исправить.

Файл /etc/profile читается оболочкой входа. Он также читается при входе в графический сеанс на многих платформах (но это зависит от диспетчера дисплея, диспетчера сеансов и от того, как настроен ваш дистрибутив).

Одна из возможных проблем заключается в том, что вы запрашиваете /etc/profile для чтения из другого места, например ~/.bashrc . Если это так, удалите его. Запустите grep -s profile ~/.* чтобы увидеть потенциальных преступников. Поскольку запуск su читает /etc/profile , должен быть хотя бы один экземпляр этой проблемы, возможно, с .bashrc .

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

Учитывая, что у вас есть одно вхождение каталогов перед /home/IntUser/bin и другое после того, как второй /home/IntUser/bin /etc/profile читается после части, которая добавляет /home/IntUser/bin .

В качестве альтернативы, если вы не хотите исправлять свою конфигурацию, вы можете добавить каталог в PATH, только если его уже нет.

 case :$PATH: in *:/usr/local/php/bin:*) :;; *) PATH=$PATH:/usr/local/php/bin;; esac 
  • читать имя пути с пробелами, затем использовать переменную в команде find
  • Почему двоеточие выбрано в качестве разделителя путей
  • Выполните команду, в которой найден файл
  • Компилятор не может найти заголовочный файл, добавить ли каталог в PATH?
  • zsh - полностью расширяет двоичный путь на вкладке <tab>
  • Добавить приложение в путь поиска команд в csh
  • Проблема с прохождением пути, содержащего пробелы и скобки
  • Как найти именно этот исполняемый файл, который будет запущен, если это имя введено в командной строке?
  • Команда moc не найдена?
  • Я изменил свой PATH, и теперь для каждой команды он возвращает команду «не найден»
  • Где исполняемые файлы ищут общие объекты во время выполнения?
  • Linux и Unix - лучшая ОС в мире.