Постоянная установка переменных окружения с помощью.sh

Прежде чем делать что-либо, что может привести к поломке вашей системы:

ИЛИ

Подойдите к одному из ваших товарищей, у которого такая же система, и:

  • Сделайте резервную копию данных вашей собственной системы
  • Сделать резервную копию их системы
  • Восстановить резервную копию их системы
  • Восстановите резервную копию данных

Нет, серьезно:

Назад!

Если кошка пройдёт по вашей клавиатуре при разбивке системы и нажмёт Del и y , у вас ничего не останется!

2
01.04.2021, 20:22
2 ответа

Причина сложности заключается в том, что скрипты выполняются в своей собственной суб-оболочке :копии вашей текущей среды. Таким образом, любые переменные, установленные сценарием, отбрасываются, как только сценарий завершает работу и возвращает вас в исходную оболочку. Однако,поскольку действительно важно иметь возможность устанавливать переменные таким образом, для этого есть инструмент. Вы ищете команду.(илиsource):

$ help.
.:. filename [arguments]
    Execute commands from a file in the current shell.
    
    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.
    
    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

Итак, в вашем случае, если вы хотите, чтобы переменные в этом файле были установлены в вашей текущей оболочке, вы должны сделать:

$. /path/to/setup-env.sh

Или, чтобы сделать это для каждой оболочки, вы должны добавить эту строку в свой~/.profile(или, если он существует, в свой/.bash_profile):

. /path/to/setup-env.sh

Вместо этого вы можете добавить его в ~/.bashrc, но это будет менее эффективно, так как он будет считываться каждой новой интерактивной оболочкой без -входа в систему, которую вы открываете (это то, что вы получаете, когда открываете терминал в графическая система Linux ), тогда как ~/.profileчитается только оболочками входа в систему, поэтому его следует читать один раз при входе в систему и никогда больше. Теперь некоторые системы не используют источник ~/.profileпри графическом входе в систему, поэтому, если вы обнаружите, что он не работает в ~/.profile, добавьте его в ~/.bashrc.

Наконец, вы можете упростить это. Нет причин для отдельных определений переменных и команд export, вы можете сделать это за один шаг:

export VULKAN_SDK="$(dirname "$(readlink -f "${BASH_SOURCE:-$_}" )" )/x86_64"
export PATH="$VULKAN_SDK/bin:$PATH"
export LD_LIBRARY_PATH="$VULKAN_SDK/lib:${LD_LIBRARY_PATH:-}"
export VK_LAYER_PATH="$VULKAN_SDK/etc/vulkan/explicit_layer.d"

Дополнительная литература:

4
28.04.2021, 22:54

Если период кажется вам «неудобным и излишне трудным», вы можете сделать то же, что и я, объявить псевдоним в вашем .bashrcфайле. Например:

alias setenv=". ~/path/to/setup-env.sh"

Затем просто запустите команду setenv, чтобы запустить ее в текущей оболочке. (Для получения дополнительной информации см. help alias.)

1
28.04.2021, 22:54

Теги

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