2015-10-15 61 views
0

我有一個關於導出庫路徑的查詢&包括鴨嘴獸變種調用者。它需要的htslib和platypus安裝在服務器上,我沒有sudo權限來更改它們。導出庫路徑和包含在perl中

我想下面的代碼導出庫&包括運行調用者。我是否缺少osmething,因爲我無法執行它?

代碼:

#!usr/perl-w 
use strict; 
use warnings; 

`export LIBRARY_PATH=/opt/htslib/lib/`; 
`export LD_LIBRARY_PATH=/opt/htslib/lib/`; 
`export INCLUDE_PATH=/opt/htslib/include/`; 
system ("python /opt/Platypus_0.8.1/Platypus.py callVariants --help"); 

任何形式的幫助,將不勝感激。

回答

2

您正在設置新制shell的環境變量,而不是父進程爲python的Perl進程的環境變量。對於這一點,你需要以下條件:

$ENV{LIBRARY_PATH} = '/opt/htslib/lib/'; 
$ENV{LD_LIBRARY_PATH} = '/opt/htslib/lib/'; 
$ENV{INCLUDE_PATH} = '/opt/htslib/include/'; 

你的代碼的最後一行是更好地寫成如下,因爲它避免了不必要的外殼:

system("python", "/opt/Platypus_0.8.1/Platypus.py", "callVariants", "--help"); 
+1

也許補充說,這些新鮮製作的貝殼會立即丟棄。 – simbabque

+0

非常感謝。它的工作雖然單引號系統中的python命令也可以正常工作。所以我對你提到的外殼不感興趣。 –

+0

我正在談論產生的shell來執行你的shell命令。你如何看待你傳遞給'system'的shell命令被執行? 'system($ shell_cmd)'是system('sh','-c',$ shell_command)''的縮寫。這是一種浪費,也是潛在的問題根源。它可以很容易地添加shell注入漏洞。它使信令變得複雜,並且它阻止你準確地確定'python'退出的方式。所以不,這不好;它充其量是充足的。 – ikegami