从脚本向终端发送命令

时间:2011-11-29 04:28:23

标签: perl

如何在perl脚本中向终端发送命令?

例如,如果我想在控制台中运行命令mkdir $directory,我在perl脚本中输入什么内容?

4 个答案:

答案 0 :(得分:5)

要从perl脚本执行任何系统命令,您需要使用带反引号的系统命令

例如

在创建目录的情况下,您需要输入

系统(mkdir $directory); #note html没有显示反引号,但是在mkdir和$ directory之后是反引号的地方

它将以$ directory

的名义在当前工作目录中创建一个目录

答案 1 :(得分:4)

http://perldoc.perl.org/functions/system.html的文档中建模示例代码:

@args = ("mkdir", $directory);
system(@args) == 0
    or die "mkdir failed";

Perl可以在没有system()调用的情况下创建目录,但我假设您要做其他事情并且只是使用mkdir作为示例。

答案 2 :(得分:4)

由于Perl内置了mkdir()系统调用,因此您根本不需要使用system命令:

my $directory = "...";
if (mkdir $directory)
{
    croak "Failed to create directory $directory ($!)";
}

如果您必须使用system,请以安全的方式执行此操作:

if (system "mkdir", $directory)
{
    croak "Failed to create directory $directory";
}

这种形式的system语句(带有参数列表)避免了shell扩展的问题。

答案 3 :(得分:0)

使用perl命令而不是依赖shell命令。 perl可以执行很多操作,如果它还不是built incore module,则可能会在CPAN上提供。

正如人们所提到的那样,mkdir可用,basic file related commands的大多数都是可用的。

话虽如此,这是perl中shell命令的污垢:

您希望perl脚本:

  • 等待执行shell命令并检查其退出状态。 使用system
  • 等待并捕获shell命令的标准输出。使用qx//或 反引号。
  • 放弃perl脚本以运行另一个命令。使用 exec。但通常情况下,你真的不想使用exec 上述链接中描述的原因。
  • 运行系统命令和管道输入或输出。使用 open,其中MODE分别为-||-