2011-10-19 2 views
0

は、私が最初に、私は以下のメソッドを使用し、perlのスクリプトでファイルをソースにしたいです:s-test.plラインでそのようなファイルやディレクトリは10perlのシェル:: GETENV

私はこの問題を解決することはできませんので、私はShell::GetEnvを使用します。

use Shell::GetEnv; 

$env = Shell::GetEnv->new('bash', 'source env.bash'); 

$envs = $env->envs(%opt); 
$env->import_envs(%opt); 

しかし、それはまったく動作しないようですが、誰も私がそれを解決するのを助けることができますか?本当にありがとう。

答えて

1

system()(少なくともUnixライクなシステムでは)/bin/shで名前付きコマンドを呼び出します。 bashとは異なり、/bin/shは、.の同義語としてsourceを持っていません。

ただし、system(". env.bash")に変更しても機能しません。おそらくenv.bashは環境変数(export FOO=BAR; ...)を設定します。このような設定は、現在のプロセスにのみ適用されます。シェルを起動し、そのシェルで環境変数を設定してから、起動する(perl)プロセスに影響を与えません。

これまでにShell::GetEnvを使用したことはありませんが、ドキュメントによれば%optは機能にオプションを渡すために使用されました。値%optには何も表示されていません。あなたはそれが本当に必要ですか?おそらく、あなただけやりたい:答えるため

... 
$envs = $env->envs(); 
$env->import_envs(); 
+0

おかげで、それはまた、%オプトなしでは動作しません:(、あなたのperlスクリプト内のファイル –

+0

@abnerソースについての良いアイデアを実行します?あなたはできませんがあなたの 'bash.env'にはおそらくbash構文のコマンドが含まれていますが、' bash.env'を次のように翻訳することができます。 Perl? –

+0

"alias prod = 'cd $ HOME/trunk'"のようにenv.bashに "alias"コマンドがいくつかあるので、コマンドを実行するために$ HOME/trunkを "prod"私はbash.envを変更できません:( –

関連する問題