我想知道是否有办法用perl脚本获取Linux命令。我在谈论cd ls ll clear cp
答案 0 :(得分:6)
您可以通过多种方式执行系统命令,有些方法比其他方式更好。
system();
打印输出命令,但不将输出返回给Perl脚本。qx();
函数,它更容易阅读并完成同样的事情。exec();
完全相同的system();
,但根本不返回Perl脚本,除非该命令不存在或失败。open();
,它允许您将脚本的输入管道传输到命令,或者将命令的输出读入脚本。值得一提的是,您使用Perl本身的内置函数可以更好地完成列出的系统命令,如cp
和ls
。任何系统调用都是一个缓慢的过程,因此当期望的结果很简单时使用本机函数,比如复制文件。
一些例子:
# Prints the output. Don't do this.
system("ls");
# Saves the output to a variable. Don't do this.
$lsResults = `ls`;
# Something like this is more useful.
system("imgcvt", "-f", "sgi", "-t", "tiff", "Image.sgi", "NewImage.tiff");
This page更详细地解释了您可以进行系统调用的不同方式。
答案 1 :(得分:2)
正如voithos所说,你可以使用system()
或反引号。但是,请注意不建议这样做,和,例如,cd
将无效(实际上不会更改目录)。请注意,这些命令在 new shell中执行,不会影响正在运行的perl脚本。
我不会依赖这些命令并尝试在Perl中实现您的脚本(如果您决定使用Perl,无论如何)。事实上,Perl最初被设计为sh和其他UNIX系统管理员shell的强大替代品。
答案 2 :(得分:0)
你可以在后面的刻度中包围命令
`command`
答案 3 :(得分:0)
问题是perl试图执行bash内置(即source
,...),好像它们是真实文件一样,但是perl找不到它们,因为它们不存在。答案是告诉perl明确执行什么。对于像source
这样的bash内置函数,请执行以下操作,它可以正常工作。
my $XYZZY=`bash -c "source SOME-FILE; DO_SOMETHING_ELSE; ..."`;
对于cd
的情况,请执行以下操作。
my $LOCATION=`bash -c "cd /etc/init.d; pwd"`;