シェル変数をエクスポート(保存)およびインポート(ソース)する

シェル変数をエクスポート(保存)およびインポート(ソース)する

環境変数をファイルに保存し、(後で) プロセスでそれらをインポートする必要があります。fooprogを実行する前に環境を無効にするプログラムを回避するためにこれが必要でありbarscript、 にはいくつかの環境変数が必要です。 そのため、 を実行する前にすべての環境変数をファイルに保存し、ファイルからソースを取得することbarscriptを計画しています。fooprogrambarscript

試してみましたが、スペースを含む変数がある場合は機能しません。

$ env > my_environment
$ . my_environment

正しい方法は、何らかの方法/proc/$$/environでこれをいじって解析することだと思いますbarscriptが、それを行う正しい方法が見つかりません。

編集: 引用符や改行も問題があります。次のような問題のある envars を問題なくソース化するにはどうすればよいでしょうか?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'

答え1

$ declare -p > my_environment

後日、内部barscript

. my_environment

declare -p必要に応じて変数を引用符で囲んだりエスケープしたりして、シェルで実行できる形式で環境変数を出力します。

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

ちなみに、環境全体を出力したくない場合は、出力する必要はありません。コマンドdeclare -pラインで出力したい変数に名前を付けるだけです。

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

または、パイプを使用して、grep -v出力に不要な特定の変数を除外します。

エクスポートされた変数のみを取得するには:

declare -p -x > my_environment

詳細については、help declareを参照してくださいbash

関連情報