2015-05-27 57 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