2013-06-26 47 views
0

不行我想切換不同的用戶在UNIXShell命令「 .profile文件」可以在Perl

. /home/tuxapp/.profile 
other shell commond.... 

這可以在外殼做工。但是,當我使用perl時它不工作。

system(". /home/tuxapp/.profile"); 
other perl code.... 

是否系統將創建一個新的進程?

但是如何使用常見的環境?

謝謝!

+0

定義「不工作」。 'echo'echo foo'> a && perl -e'system「。a」''爲我打印'foo',就像我期望的那樣。 – ikegami

+4

是的,'系統'創建一個新的過程。這就是'系統'的關鍵。 'system($ command)'啓動'sh'並讓它執行提供的shell命令。 – ikegami

+1

你似乎在尋找這樣的:[如何在perl腳本中獲取shell腳本[環境變量]而不需要分派子shell?](http://stackoverflow.com/questions/6829179/how-to-source-a- shell腳本的環境變量,在-perl的腳本,而無需叉) – devnull

回答

4

如果您希望使用shell命令爲Perl命令設置環境變量,那麼必須使該shell執行Perl腳本。環境變量從父項傳遞給子項,而不是從子項傳遞給父項。

. /home/tuxapp/.profile && script.pl 

如果絕對必須來自腳本內,您可以啓動一個shell來設置環境並重新啓動腳本。

if (!$ENV{initialized}) { 
    exec('sh', '-c', '. /home/tuxapp/.profile && initialized=1 exec "[email protected]"', '--', 
     $^X, '--', $0, @ARGV) 
     or die; 
}