2017-03-17 15 views
0

パスを永久に別のパスに変更するためのシェルスクリプトがあります。私の要件は、perlスクリプトを使用して、それをソースすることである(perlのスクリプトは、同様に他のいくつかのコードを持っており、最終的には、以下のシェルザ・スクリプトを調達しなければならない)perlスクリプトからシェルスクリプトを入手する

test.sh:

!/bin/bash 
cd /db/oa/invoke/path 

test.pl:

!/usr/bin/perl 
system("source /home/test.sh"); 

しかし、調達は機能していません。私はsystem("sh /home/test.sh --help")のperlスクリプトからシェルスクリプトを実行するコマンドを知っています。しかし、私はシェルスクリプトのソースに似たコマンドが必要です。詳細が不明な場合はお知らせください。私はすでに同じトピックで質問されている質問を見てきましたが、私は調達のための適切な解決策を見ていませんでした。誰もが私にこれを助けることができます。

よろしくお願いします。Anand

+0

が含まれているあなたが求めているものを行うにはまともな方法はありません。サブプロセスは親の環境に影響を与えません。あなたは基本的にPerlの 'exec' Bashを持っていなければなりません。そして、' exec' Perlをこれを取り戻すために戻してください。 – tripleee

+0

また、シバンは2つの文字 '#! 'で始める必要があります。これは構文的に有効で実際に役立つためです。 – tripleee

+1

あなたの例のようにシェルスクリプトを使っている場合は、ディレクトリを変更するだけで、perlの 'chdir'関数を使ってディレクトリを変更することができます。あなたはまだ上に上がっているすべての問題を持っています。 – mttrb

答えて

0

@tripleeeによると、あなたは自分自身をexecしなければなりません。ここで私はそれを行うだろうかです:

if (defined $ENV{TOTO}) { 
    print "TOTO is $ENV{TOTO}\n"; 
} else { 
    my $cmd = ". ./source.txt ; exec $^X $0 " . join(' ', @ARGV); 
    system ($cmd); 
} 

私のスクリプトsource.txtは

export TOTO=titi 
関連する問題