如何调用shell命令,在Perl脚本中说“ls -a
”以及检索命令输出的方法是什么?
答案 0 :(得分:62)
How to run a shell script from a Perl program
1。使用系统系统($ command,@ arguments);
例如:
system("sh", "script.sh", "--help" );
system("sh script.sh --help");
系统将执行$命令 @arguments并在完成后返回脚本。你可以检查$! 对于外部应用程序传递给操作系统的某些错误。读 系统的文档为各种各样的细微差别 调用略有不同。
2。使用exec
这与使用system非常相似,但它会 执行时终止你的脚本。再次阅读文档 exec获取更多信息。
3。使用反引号或qx //
my $output = `script.sh --option`;
my $output = qx/script.sh --option/;
反引号运算符及其等价的qx //执行运算符内的命令和选项 返回该命令在完成时输出到STDOUT。
还有 通过创造性地使用open来运行外部应用程序的方法,但是 这是先进的用途;阅读文档了解更多信息。
答案 1 :(得分:13)
从Perl HowTo开始,从Perl执行外部命令的最常用方法是:
my $files = `ls -la`
- 在$files
system "touch ~/foo"
- 如果您不想捕获命令的输出exec "vim ~/foo"
- 如果您不想在执行命令open(my $file, '|-', "grep foo"); print $file "foo\nbar"
- 如果您想将输入传输到命令答案 2 :(得分:11)
查看Perl中的open函数 - 尤其是使用“|”的变体(管道)在参数中。正确完成后,您将获得一个可用于读取命令输出的文件句柄。后退操作员也这样做。
您可能还想查看Perl是否可以访问命令本身使用的C函数。例如,对于ls -a
,您可以使用opendir函数,然后使用readdir函数读取文件名,最后使用(惊讶){{3}关闭目录功能。这有许多好处 - 精度可能比速度更重要。使用这些函数,即使文件名包含像换行符这样的奇数字符,也可以获得正确的数据。
答案 3 :(得分:11)
`ls -l`;
system("ls -l");
exec("ls -l");
答案 4 :(得分:8)
随着您对使用Perl越来越有经验,您会发现需要运行shell命令的次数越来越少。例如,获取文件列表的一种方法是使用Perl的内置glob函数。如果您希望列表按排序顺序排列,则可以将其与内置sort函数结合使用。如果您需要有关每个文件的详细信息,可以使用stat功能。这是一个例子:
#!/usr/bin/perl
use strict;
use warnings;
foreach my $file ( sort glob('/home/grant/*') ) {
my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)
= stat($file);
printf("%-40s %8u bytes\n", $file, $size);
}
答案 5 :(得分:6)
有很多方法可以从perl脚本调用shell命令,例如:
ls
捕获输出并返回给您。请参阅此处的#17:perl programming tips
答案 6 :(得分:1)