【问题标题】:Expanding Perl array into shell command arguments将 Perl 数组扩展为 shell 命令参数
【发布时间】:2012-04-30 18:34:57
【问题描述】:

我想从 Perl 脚本调用 shell 命令。命令的参数存在于 Perl 数组中。

最简单的方法是什么?

感谢回复

【问题讨论】:

    标签: perl


    【解决方案1】:

    您可能需要调用system,并且将参数作为列表传递是最有效的,这样可以避免使用shell来解析命令行。像这样的电话

    my $status = system 'command', @arguments;
    

    应该做你需要的。

    【讨论】:

    【解决方案2】:

    大多数函数通常接受两种形式来启动程序:

    • 接受路径和参数列表
    • 接受 shell 命令。

    第一个更安全,需要的资源更少。

    system($prog, @args);             # @args > 0
    system({ $prog } $prog, @args);   # @args >= 0
    

    但是如果你必须使用 shell 或者你必须提供一个 shell 命令,有String::ShellQuote(如果你在 unix 系统上)或Win32::ShellQuote(如果你在 Win32 系统上)来帮助你。

    use String::ShellQuote qw( shell_quote );
    my $shell_cmd = shell_quote($prog, @args);
    system($shell_cmd);
    

    【讨论】:

    • 注意:您实际上不需要使用数组。对于systemshell_quote,任何产生列表(包括列表文字)的表达式都是可接受的。
    • @daxim,哦!不知道 Win32::ShellQuote。
    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 2019-05-09
    • 2010-12-31
    • 2015-10-08
    • 2023-03-09
    相关资源
    最近更新 更多