Работа с экспортом странного поведения 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 []# 

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

  • Если PATH содержит $ HOME / mydir и добавляет его, если нет (все в скрипте)
  • Пути, относящиеся к компиляции из источника
  • Компилятор не может найти заголовочный файл, добавить ли каталог в PATH?
  • Я изменил свой PATH, и теперь для каждой команды он возвращает команду «не найден»
  • Как найти именно этот исполняемый файл, который будет запущен, если это имя введено в командной строке?
  • Добавить каталог в путь для всех оболочек и пользователей в SLES 11.1
  • Добавить приложение в путь поиска команд в csh
  • Почему двоеточие выбрано в качестве разделителя путей
  • 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 
    Interesting Posts

    Как подделать исходный порт TCP-пакета?

    Как объяснить следующий сценарий?

    Как выполнить встроенную команду оболочки с помощью find?

    Сортировка строки datetime в 12-часовом формате

    Может добавить горячую клавишу Tab в мой сценарий оболочки?

    Не удается получить доступ к GRUB после удаления Win 8

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

    Детский процесс продолжает работать, если родитель умирает

    Контейнер-докер не может вытащить репозиторий github, сбой разрешения имени

    как заставить GRUB найти модули для многозадачных Linux LiveUSB?

    вкладка-расширение и "./" bash shell

    Открытые программы без блокировки терминала через Putty

    Обратная связь при вводе паролей без раскрытия длины

    Заменить строку после последней точки в bash

    Как ssh на удаленную машину и создать нового пользователя в сценарии bash

    Linux и Unix - лучшая ОС в мире.