環境変数をファイルに保存し、(後で) プロセスでそれらをインポートする必要があります。fooprog
を実行する前に環境を無効にするプログラムを回避するためにこれが必要でありbarscript
、 にはいくつかの環境変数が必要です。 そのため、 を実行する前にすべての環境変数をファイルに保存し、ファイルからソースを取得することbarscript
を計画しています。fooprogram
barscript
試してみましたが、スペースを含む変数がある場合は機能しません。
$ 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
。