我正在尝试编写一个脚本(混合使用perl和bash)来解压缩文件。
unzip命令是特定于用户的(取决于文件),因此用户需要输入命令的开头,然后将其存储在名为$ unzipCommand(perl)的变量中。例如,用户可以输入'gunzip'或'gunzip'。例如:
MPI_Bcast(B[0], N*N, MPI_DOUBLE, ...);
此变量可以访问并且有效,例如,我可以将其打印到屏幕上。但是,我想使用它来构建一个存储在.sh文件中的命令行。
我已尝试过各种方法来做到这一点,但似乎没有任何效果。 Tha变量看起来像这样:
my $unzipCommand = "gunzip";
为了将它存储在shell脚本中,我尝试过:
my $cmd = "$unzipCommand $path2zippedfile > $path2file";
和
`echo "$cmd" > $sh_script`;
命令似乎总是“执行”而不是打印在文件中。
我知道该命令有效,因为如果我硬编码'gunzip',我就不会收到此错误。
非常感谢任何帮助。 谢谢!
答案 0 :(得分:1)
您可以尝试使用此代码。
open ('FH','>',$sh) or die "unable to open $!\n";
my @arr = split(/' '/,$cmd);
foreach(@arr){ print FH $_;}
close(FH);
我假设$sh
是脚本名称,而$cmd
是您要在脚本中编写的命令。
答案 1 :(得分:0)
尝试以下
open (FH, ">", "$sh_Script") or die "Can't open File Handle";
print FH "$cmd";
close FH;
我假设$sh_Script
是您想要的脚本路径,$cmd
是您要存储在文件中的内容。
答案 2 :(得分: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;