从脚本向终端发送命令

发布于 2024-12-18 15:17:14 字数 101 浏览 1 评论 0 原文

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

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

How do you send commands to the terminal in a perl script?

For example, if I want to run the command mkdir $directory in the console, what do I type in the perl script?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风蛊 2024-12-25 15:17:15

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

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

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

Modeling off the sample code in the documentation at http://perldoc.perl.org/functions/system.html:

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

Perl can make directories without system() calls, but I assume you want to do other things and are just using mkdir as an example.

∞觅青森が 2024-12-25 15:17:15

由于 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 扩展的问题。

Since Perl has the mkdir() system call built in, you don't need to use the system command at all:

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

If you must use system, do so the safe way:

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

This form of the system statement (with a list of arguments) avoids the problems of shell expansion.

蓝眸 2024-12-25 15:17:15

使用 perl 命令而不是依赖 shell 命令。 Perl 可以做很多事情,如果它还没有内置,或者核心模块,它可能在 CPAN

正如人们所提到的, mkdir 可用,因此大部分 基本文件有关的命令

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

您希望 perl 脚本:

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

Use perl commands instead of relying on shell commands. There are a great many things that perl can do, and if it is not already built in, or a core module, it's likely available on CPAN.

As people have mentioned, mkdir is available, and so are most of the basic file related commands.

That being said, here's the dirt on shell commands in perl:

You want the perl script to:

  • Wait while the shell command is performed and check its exit status.
    Use system
  • Wait and capture the standard output of the shell command. Use qx//, or
    backticks.
  • Abandon perl script to run another command. Use
    exec. But usually, you'll not really want to use exec, for
    reasons described in the link above.
  • Run the system command and pipe input or output to/from it. Use
    open with MODE either -| or |-, respectively.
骑趴 2024-12-25 15:17:14

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

例如,

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

system(mkdir $directory); #note html 不显示反引号,但反引号位于 mkdir 之前和 $directory 之后

它将在当前工作目录中以 $directory 的名称创建一个目录

For executing any system command from perl script you need use system command with a backtick

For e.g

In your case for creating a directory you need to type

system(mkdir $directory); #note html is not showing the backtick but backtick is place before mkdir and after $directory

It will create a dir in current working dir in the name of $directory

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文