2015-01-08 19 views
0

調用UNIX命令我試圖執行以下UNIX命令,但它沒有得到執行如何在Perl

$array_of_tables= `dbsmp $srv_name`; 
print "$array_of_tables\n"; 

請幫我找出表的列表中,通過Perl腳本編程數據的基礎上。

而且我試圖將文件從不同路徑的路徑複製使用以下命令: -

copy(`cd /osp/slee/service/$srv_name/bin/exec/script.txt`,`cd /osp/local/home/linus/amit/scripts`); 

,但得到的錯誤: -

Usage: copy(FROM, TO [, BUFFERSIZE]) 

請提供一些解決方案 謝謝

+0

你的第二個命令應該是'copy('/ osp /.../ script.txt','/ osp /.../ scripts');'(注意撇號不是反引號) – knittl

+0

Just don' t調用外部命令並使用健壯且便攜的核心模塊,http://perldoc.perl.org/File/Copy.html –

回答

3

使用雙引號而不是後勾。

copy("/osp/slee/service/$srv_name/bin/exec/script.txt","/osp/local/home/linus/amit/scripts"); 

並取出cd

+0

現在我沒有得到那個特定的錯誤,但文件沒有得到複製在給定的路徑。有沒有其他方法可以在Perl腳本中的Unix平臺上覆制文件? – Amit

+0

其工作正常謝謝 – Amit

0

在Perl中,優選的方式來捕獲系統的輸出(殼)的命令是qx()運算符。請參閱http://perldoc.perl.org/perlop.html#Quote-Like-Operators

$array_of_tables = qx(dbsmp $srv_name); 
print("$array_of_tables\n"); 

事實上,反引號也應該起作用,所以問題必須出現在你的dbsmp命令中。我不確定那個命令是什麼;您必須提供有關該實用程序的更多信息以及您所看到的錯誤。

爲了便於比較,我可以用這個shell命令檢索表的列表在我的本地Postgres數據庫作爲豎線分隔表:

> psql -tAXq main postgres <<<\\d; 

這可以從Perl的如下運行:

> perl -e 'print(qx(psql -tAXq main postgres <<<\\\\d;));' 
+2

反引號*是* qx操作符(就像雙引號是qq和單引號是q) – ysth