Bashや他のシェルでは、コマンドの前に同じ変数を定義して「ラインスコープ」コマンドを作成できます。
CXX=clang++ ./script.bash
私はどちらが好きですか?
export CXX=clang++
./script.bash
前者は環境を汚染しないからです。
設定された変数を使用して同じことを行い、source
同じ「行範囲」効果を得るにはどうすればよいですか?
以下と同じ:
source env.source # defines a bunch of vars
./script.bash
??? ./script.bash
答え1
サブシェルを使用してください:
( source env.source && ./script.bash )
サブシェルが終了すると、サブシェル内の環境が破壊されます。
または、次のスクリプトをbash
設定しますBASH_ENV
。
BASH_ENV=./env.source ./script.bash
このBASH_ENV
変数は非対話型シェル(スクリプトなど)に適用されます。この変数がドットスクリプトのパス名に設定されている場合、メインスクリプトの本文が実行される前にドットスクリプトが取得されます。を$PATH
使用する場合、またはを使用する場合とは異なり、ドットスクリプトを検索しないため、フルパスBASH_ENV
(相対または絶対)を指定する必要があります。.
source
("dot-script" ==(ドット)ユーティリティから派生したスクリプト(.
とも呼ばれるsource
)bash