Perlスクリプト内からBash環境変数(Bashシェルから~/.bashrc
を入手することで定義)をロードする方法はありますか?具体的には、Perlスクリプトの呼び出し元がbash
プロセスの子でない場合に、PERL5LIB
環境変数をリロードすることに興味があります。その場合、$ENV{PERL5LIB}
は存在しないため、ホームディレクトリにインストールしたモジュールを使用できなくなります。Perlスクリプト内でBash環境変数を再ロードするには?
オプションを使用してbash
の下に自分自身を再実行することが最初の試みです。これは~/.bash_profile
をロードし、そのファイルをロードして~/.bashrc
に設定しました。
#! /usr/bin/env perl
use strict;
use warnings;
if (!exists $ENV{PERL5LIB}) {
exec 'bash', '-lc', $0, @ARGV;
}
else {
# Main program starts here..
}
しかし、これはPERL5LIB
は~/.bashrc
に定義されていません(予期しない)場合の無限ループに入ることができます。
脚注:Google Chromeの拡張APIを使用してgoogle-chrome
プロセスから呼び出されるネイティブホストを記述しようとしたとき
は、[1]この特定のケースでは私のために発生しました。
あなたの拡張機能のようなサウンドは、拡張機能自体と一緒に非標準のライブラリをインストールする必要があります。そして、ユーザーが管理する必要はなく、起動時に(相対)パスをハードコードして '@ INC'に追加できますこれは(あなたのライブラリと彼ら自身のニーズに実際に欲しいものとの間に起こりうるあらゆる衝突)。 – tripleee
ホームディレクトリからモジュールをロードするだけなら、環境変数に頼るのではなく、ホームディレクトリで 'use lib'を実行してみてはどうでしょうか? – cdarke
あなたのスクリプトは、呼び出し元が* bashを使用しているかどうか知りません。スクリプトを呼び出すときに 'PERL5LIB'が適切な値になっていることを確認するのは呼び出し側の責任です。 – chepner