1. ホーム
  2. bash

[解決済み] Bashスクリプトからソースなしで環境に変数をエクスポートすることはできますか?

2022-03-24 06:14:40

質問

このようなスクリプトがあるとします。

エクスポート.bash :

#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"

スクリプトを実行して $VAR というように、何の値も得られないのです!

echo $VAR

にアクセスする方法はありますか? $VAR を実行するだけで エクスポート.bash ソースをかけずに?

どのように解決するのですか?

<ブロッククオート

にアクセスする方法はありますか? $VAR を実行するだけで export.bash ソースなしで?

即答です。いいえ。

しかし、いくつかの回避策が考えられます。

一番わかりやすいのは、すでにおっしゃられているように source または . を使用すると、呼び出したシェルのコンテキストでスクリプトを実行することができます。

$ cat set-vars1.sh 
export FOO=BAR
$ . set-vars1.sh 
$ echo $FOO
BAR

もう一つの方法は、環境変数を設定するのではなく、スクリプトが環境変数を設定するコマンドを表示するようにすることです。

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR

第三の方法は、内部で環境変数を設定し、その環境下で指定されたコマンドを起動するスクリプトを用意することです。

$ cat set-vars3.sh
#!/bin/bash
export FOO=BAR
exec "$@"
$ ./set-vars3.sh printenv | grep FOO
FOO=BAR

この最後の方法は非常に便利ですが、現在のシェルの設定(他の設定や蓄積された履歴も含めて)を得ることができないため、対話的に使用するには不都合です。