Не понимаете, что настройка среды пути Linux /etc/profile.d/*.sh выполняется дважды?

Ya que está considerando eliminar tgtde todos modos, ¿por qué no intenta ejecutar rsynccon -Hpara ver qué sucede?

Se crearán los enlaces duros y se ahorrará espacio.

0
15.05.2019, 15:26
2 ответа

Это разница между экспортируемыми и не -экспортируемыми переменными среды.

Команда exportперечисляет только экспортированные переменные среды ,то есть те переменные, которые помечены как наследуемые дочерними процессами либо потому, что оболочка унаследовала их от своего родительского процесса, либо потому, что была использована команда exportили declare -x, чтобы пометить их как экспортируемые.

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

Для установки не -экспортируемой переменной можно использовать только синтаксис name=value:

$ FOO=bar
$ echo $FOO
bar
export | grep FOO
$

Позже вы можете пометить переменную как экспортируемую:

...
$ export FOO
$ export | grep FOO
declare -x FOO="bar"

Классическая оболочка Bourne на самом деле требовала от вас инициализировать переменные среды в два -шага :сначала установить значение, а затем пометить его как экспортируемое. Таким образом, вы все еще можете видеть этот синтаксис в сценариях оболочки, стремящихся к максимальной переносимости :

.
FOO=bar
export FOO

Современные оболочки позволяют сделать это за один шаг:

$ export FOO=bar

Таким образом, в вашем случае вы должны были ранее выполнить PKG_CONFIG_PATH=:/usr/local/lib/pkgconfigлибо вручную, либо в исходном сценарии, либо как часть ваших сценариев входа.

2
28.01.2020, 02:30

Прямо сейчас у меня есть два решения:

  1. Удалите этот код из /etc/bashrc

    for i in /etc/profile.d/*.sh; do
      if [ -r "$i" ]; then
         if [ "$PS1" ]; then
           . "$i"
         else
          . "$i" >/dev/null
         fi
      fi
    done
    

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

  2. Просто используйте прямое назначение в /etc/profile.d/ *.sh

    export PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig
    

    Конечно, это исключает любой ранее существовавший путь, а не стандартную практику.

Ни одно из них не кажется идеальным решением, есть ли лучшее предложение?

Обновление:

Выполнение ① приведет к появлению этого сообщения об ошибке после ввода каждой команды на терминале

 bash: __vte_prompt_command: command not found
0
28.01.2020, 02:30

Теги

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