2015-05-27 58 views
0

我正在嘗試編寫腳本(混合使用perl和bash)來解壓縮文件。使用變量在perl/bash中存儲命令行

unzip命令是用戶特定的(取決於文件),因此用戶需要輸入命令的開頭,然後將其存儲在名爲$ unzipCommand(perl)的變量中。例如,用戶可以輸入'gunzip'或'gunzip'。例如:

my $unzipCommand = "gunzip"; 

這個變量是可以訪問和運行的,例如,我可以將它打印到屏幕上。但是,我想用它來構建一個存儲在.sh文件中的命令行。

我試過各種方法來做到這一點,但似乎沒有任何工作。 臨屋變量是這樣的:

my $cmd = "$unzipCommand $path2zippedfile > $path2file"; 

並將其存儲在一個shell腳本,我曾嘗試:

`echo "$cmd" > $sh_script`; 

open $sh_script, ">", "$QSUB" or die "Can't open '$QSUB'"; 
print $sh_script "$cmd"; 
close $sh_script; 

它似乎總是命令是「執行'而不是打印在文件中。

我知道命令的工作原理是因爲如果我硬編碼'gunzip',我不會得到這個錯誤。

任何幫助將不勝感激。 謝謝!

+0

開啓調試功能,查看引用級別(dbl-quote vs back quotes vs vs single quotes)中的變量 - >值是否可見。祝你好運。 – shellter

+0

什麼'print「$ cmd」;'(Perl)給你? – thonnor

回答

0

請嘗試以下

open (FH, ">", "$sh_Script") or die "Can't open File Handle"; 
print FH "$cmd"; 
close FH; 

我假設的$sh_Script是路徑要和$cmd是你想要的文件中存儲你的腳本。

+0

是的,$ sh_Script是路徑,$ cmd是命令(我的壞)。我試過這個解決方案,但它沒有工作:-( – Pachapep

+0

什麼是錯誤?它沒有在腳本上打印任何東西嗎?腳本文件是否已經存在?如果不是使用類似這樣的文件創建文件'exec(觸摸$ sh_Script)if(!-e $ sh_Script);' 然後使用我以上的答案之後。 – Raghuveer

1

您可以試試這段代碼。

open ('FH','>',$sh) or die "unable to open $!\n"; 
my @arr = split(/' '/,$cmd); 
foreach(@arr){ print FH $_;} 
close(FH); 

我假設$sh是腳本的名稱和$cmd是要在腳本編寫命令。

0

我的貢獻(完整腳本),它採用硬編碼的值並用一行創建一個小shell腳本。

#!/usr/bin/perl 

use strict; 

my $unzipCommand = "gunzip"; 
my $path2zippedfile = "/home/honnor/zip1.gz"; 
my $unzipperScript = "unzipper.ksh"; 
my $cmd = "$unzipCommand $path2zippedfile"; 

print "$cmd"; 


open(my $fh, ">", $unzipperScript) or die $!; 
print $fh "$cmd"; 
close $fh; 
+0

非常類似於這裏的其他答案 - 道歉:) – thonnor