環境変数をファイルに保存し、(後で)プロセスからその変数をインポートする必要があります。fooprog
を実行する前に環境を無効にするプログラムを解決するには、これが必要barscript
ですbarscript
。だから実行する前に、すべての環境変数をファイルに保存し、fooprogram
ファイルbarscript
からインポートする予定です。
これを試しましたが、空白を含む変数がある場合は機能しません。
$ env > my_environment
$ . my_environment
/proc/$$/environ
正しい方法はそれを操作して何とか解析するbarscript
ことですが、正しい方法を見つけることができません。
編集:引用符や改行文字にも問題があります。問題なく次の問題のある環境変数を取得するにはどうすればよいですか?
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
。