2017-03-17 137 views
0

我有一個shell腳本將我的路徑永久更改爲另一個路徑。我的要求是用Perl腳本源它(perl腳本有一些其他的代碼,以及最後它必須發送下面的殼素文字)從perl腳本獲取shell腳本

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腳本執行shell腳本。但我需要類似的命令才能獲取shell腳本。請讓我知道,如果我錯過任何細節。我已經看到關於同一主題的問題,但我沒有看到採購的合適解決方案。誰可以幫我這個事。

問候阿南德

+0

沒有理智的方式來做到你的要求。子流程不能影響父級的環境。你基本上必須使用Perl'exec' Bash,然後把'exec' Perl重新加載回去,以便把它關閉。 – tripleee

+0

另外,shebang需要以'#!'這兩個字符開始,以便它在語法上有效且實際有用。 – tripleee

+1

如果你是shell腳本,就像在你的例子中,只是改變目錄,你可以使用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