![寻求解决方案以避免在php脚本中多次执行linux命令](https://linux22.com/image/178314/%E5%AF%BB%E6%B1%82%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E4%BB%A5%E9%81%BF%E5%85%8D%E5%9C%A8php%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%A4%9A%E6%AC%A1%E6%89%A7%E8%A1%8Clinux%E5%91%BD%E4%BB%A4.png)
我有一个 PHP 脚本,它向 Angular 提供一些输出。该脚本对于从 Perl 脚本获取信息很有用。我正在使用exec()
命令来调用 PHP 中的脚本。我得到了我想要的,但问题是耗时。我执行相同的脚本三次以在 php 中创建数组。例如:
exec("/usr/bin/reports -h -r -t ".$this->name." | grep -o '^\S*' | sed '1 d'",$report_id);
exec("/usr/bin/reports -h -r -t ".$this->name." | grep -oP '(?<= ).*' | sed '1 d'",$titles);
exec("/usr/bin/reports -h -r -n ".$this->name." | grep -oP '(?<= ).*' | sed '1 d'",$fullnames);
正如您所看到的,我只是因为更改了参数而多次执行相同的脚本。
通过我存储的第一个命令report_id
,第二个命令用于存储他们的位置,第三个命令用于存储他们的全名。我需要一个解决方案将这三个命令合二为一。请帮助避免时间复杂度。
答案1
- 我建议使用AWK,它可以解析多个正则表达式并自动分隔字段。它是一种简单而小型的语言,适用于所有 Unix,是专门为此类工作而创建的。
- 更好的方法是获取输出并使用 PHP 进行处理。执行()以行数组形式返回输出。preg_split()可以完成 grep/sed/cut 工作。
- 您可以使用 tee 命令在多个管道中使用报告的输出。
- 最后,你可以使用定制的锁定机制,但我不建议这样做。