.shを使用して環境変数を永久に設定する

.shを使用して環境変数を永久に設定する

視聴後.sh ファイルを使用した環境変数の設定そして環境変数を恒久的に設定する方法.shファイルで永続的な環境変数を適切に設定する方法はまだ混乱しています。 (私はLinuxをたくさん使うので、確かに初心者です。)

私の特別なケースには次のものがありますsetup-env.sh

# Copyright (c) 2015-2019 LunarG, Inc.

# source this file into an existing shell.

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

/home/jonathan/.bashrc以下を含めるように編集できます。

export VK_LAYER_PATH="/home/jonathan/Vulkan/1.2.170.0/x86_64/etc/vulkan/explicit_layer.d"
export VULKAN_SDK="/home/jonathan/Vulkan/1.2.170.0/x86_64"
export LD_LIBRARY_PATH="/home/jonathan/Vulkan/1.2.170.0/x86_64/lib:"

これが. setup-env.sh彼らに走ることがすることです。

しかし、これは厄介で不必要に難しいようです。スクリプトを実行して永続的な環境変数を設定するより良い方法はありますか?

答え1

これが複雑な理由は、スクリプトが現在の環境のコピーである独自のサブシェルで実行されるためです。したがって、スクリプトが終了して元のシェルに戻ると、スクリプトで設定したすべての変数は削除されます。しかし、この方法で変数を設定することは本当に重要なので、これを達成するためのツールがあります。次のコマンドを探しています.(または)。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すべての作業を1つのステップで実行できます。

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"

追加資料:

答え2

期間が「厄介で不必要に難しい」場合は、私がしたようにファイルにエイリアスを宣言できます.bashrc。たとえば、

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

次に、コマンドを実行setenvして現在のシェルで実行します。 (help alias詳しくは参考資料をご覧ください。)

関連情報