.sh
私はBash 4.3.48(1)を使用しており、Shebangの下に約20個の変数を含むファイルがあります。このファイルには変数のみが含まれています。
パターンは次のとおりです。
x="1"
y="2"
...
これらすべての変数を次にエクスポートする必要があります。乾いた方法:たとえば、export
20が20の変数に対応するのではなく、1がすべての変数に対応しますexport
。
最もエレガントな方法は何ですか(最も短く、最も効率的です)~へそのファイル?
サイクルfor
?一つarray
?おそらくこれよりも簡単なもの(一種のコレクション砂糖フレーズ)がありますか?
答え1
シェルオプションを有効にするには、ファイルの上部set -a
(またはそれに対応する項目)を使用します。次に、(該当する場合)ファイルの末尾に(or)を使用してシェルオプションを無効にします。set -o allexport
allexport
set +a
set +o allexport
allexport
シェルを有効にするallexport
オプションを使用すると、次の効果が得られます(マニュアルを参照bash
)。
生成または変更されたすべての変数または関数にはエクスポート属性が付与され、後続のコマンド環境にエクスポートするために表示されます。
set -a
またはに設定されているこのシェルオプションは次のとおりset -o allexport
です。POSIXで定義sh
(したがって、すべての同様のシェルで利用可能でなければなりません)
このオプションをオンにすると、出口割り当てが実行される各変数にプロパティを設定する必要があります。 [...]コマンドの割り当てがユーティリティ名の前にある場合出口ユーティリティが完了した後、プロパティは現在の実行環境で持続してはいけませんが、前述の特別な組み込みユーティリティの1つが原因で出口ビルドが完了した後も残るプロパティです。割り当てがコマンドのユーティリティ名の前にない場合
getopts
、または割り当てがORユーティリティ操作の結果であるread
場合出口属性は、変数が設定解除されるまで持続する必要があります。
このオプションを有効にすると、設定された変数がエクスポートされます。つまり、環境変数に配置されます。通常どおり、これらの環境変数は、現在のシェル環境とそれ以降に作成されたすべての子プロセス環境で使用できます。
これはあなたがしなければならないことを意味します
- このファイルをインポートします(このコマンドでシェルで使用するか
.
使用します)。またはsource
- このファイルの変数にアクセスする必要があるプロセスを開始します。
答え2
トリックは次のとおりです。
source <(sed 's/^/export /' file.sh)
私はあなたのシェルがbashのようにサポートしていると仮定します。プロセスの交換
または、ファイル自体を編集します。
sed -i 's/[^=]\+/export &; &/' file.sh