単一行範囲ソースを使用した変数のロード

単一行範囲ソースを使用した変数のロード

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" ==(ドット)ユーティリティから派生したスクリプト(.とも呼ばれるsourcebash

おすすめ記事