【问题标题】:How to execute many (~15) bash commands in Perl?如何在 Perl 中执行许多 (~15) bash 命令?
【发布时间】:2012-11-01 13:50:58
【问题描述】:

我知道system()qx(),但我需要执行~15 个bash 命令。例如

mkdirchownedquota -p user1 -u user2cp -rsu - usernamegitrmln -s

问题

有没有一种在 Perl 中执行许多 Bash 命令的有效方法?

在这种情况下,我不关心输出。

【问题讨论】:

  • 你可以把它放在一个shellscript中并用qxsystem执行它...
  • 还值得一提的是,您正在运行的许多命令不需要system(),它们具有 perl 等效项。你可以setuid 你可以unlink 你可以mkdir 你可以chown 等等,都直接来自perl。在您粘贴的命令中,edquotagit 可能是唯一最容易通过 system 实现的命令
  • 即使 git 也有 modules that wrap it

标签: perl bash


【解决方案1】:

首先,我会尽可能多地对那些 bash 命令使用等效的 Perl 函数,这是您在帖子中包含的大部分命令。然后,对于其余部分,我将使用 system() 或 qx() 或反引号或 IPC:: 模块之一(例如 IPC::Run 或 IPC::Open3)。

【讨论】:

    【解决方案2】:

    对许多命令使用 bash 语法。用;&& 或任何你喜欢的东西(man bash) 将它们分开。

    $ perl -E 'system qq{date; date}'
    

    【讨论】:

      【解决方案3】:

      在 Linux 中,我喜欢 POE 框架的 POE::Wheel::Run 模块,用于异步运行系统命令(和代码块)。你说你不关心输出,但是如果你将来需要它 POE::Wheel::Run 有一个优雅的界面允许我们与流程进行交互。

      【讨论】:

        【解决方案4】:
        my $s = <<END;
        echo "1"
        echo "2"
        
        echo "3"
        END
        
        system("$s");
        

        【讨论】:

          猜你喜欢
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          相关资源
          最近更新 更多