【问题标题】:PHP vs BASH for CLI scripting? [closed]用于 CLI 脚本的 PHP 与 BASH? [关闭]
【发布时间】:2011-02-16 15:04:58
【问题描述】:

我从未在 CLI 中使用过 PHP,但我见过使用 PHP 代码运行的脚本。

我想知道:

  • 既然 PHP 如此流行并且可以在 CLI 中运行,我们为什么还要使用 BASH?
  • 各有什么优缺点?
  • 以后我应该将 PHP 用于所有 CLI 脚本吗?

【问题讨论】:

    标签: php bash command-line-interface


    【解决方案1】:

    在 bash 中执行许多常见任务仍然容易得多。考虑为以下 bash 单行代码编写 PHP 等效项:

    # remove a folder full of rubbish
    rm -rf oldTrashFolder
    
    # create an archive of files containing the word 'localhost'
    tar cf backup.tar $(grep -rlw localhost ~/my-source-code)
    
    # make a copy of a mysql database
    { echo "create database NEWDATABASE; "; mysqldump OLDDATABASE; } | mysql NEWDATABASE
    

    【讨论】:

    • 唯一正确的方法是帮助您实现目标的方法。所以不要介意你是否使用 PHP、Bash、Python 或其他任何东西。只做最适合你的方式。
    • 我想指出在 PHP 中使用 backtics 执行 rm -rf oldTrashFolder 的能力。这基本上否定了整个观点。在任何你喜欢的地方编码,imo。另外,请考虑您的脚本是否将在您不希望安装 PHP 的环境中(或者您将移动它以快速执行并且不想仅仅因为您选择编写它而安装 PHP PHP)。
    【解决方案2】:

    Bash 在这种类型的应用程序中更为常见,因为它永远存在。但是当谈到选择一个而不是另一个时。您已经知道的语言通常是更好的选择。只是因为你会更有效率。

    【讨论】:

    • 没有比这个更好的答案了
    【解决方案3】:

    我想主要的事情是:bash 总是存在于最近的 unix 系统上(它的前辈真的一直存在,即使是在古老的 unixen 上)。 Bash 使用了系统上的所有小工具,包括 PHP、Python、Ruby、AWK、Perl(尤其是最后两个)。

    考虑:如何安装 PHP?一堆 bash 脚本和一个 makefile,对吧?或者你的操作系统包管理器,现在可能是 Python,但也曾经是一个 bash 脚本。

    如果不真正了解 shell,就无法管理 unix,也无法编写或使用 makefile。这可能不是每次都正确的答案,但对于脚本工作,我总是试图弄清楚它是否可以首先在 bash 中完成。

    【讨论】:

      【解决方案4】:

      主要是偏好。

      高级语言(如 php)具有更好的数据结构,易于访问(除其他外)。但是,将一个有效的 bash 脚本组合在一起非常容易。

      真的,这取决于你。

      【讨论】:

        【解决方案5】:

        PHP 仅在 web 目录中更好。 Bash 更适合处理命令行输入和通用 shell 语义,IMO。

        【讨论】:

        • 老实说,我会选择 python、ruby 或 perl 而不是 php 来编写 shell 脚本,出于类似的原因,我可能会选择 php 而不是 bash 来通过 HTTP 提供内容。
        【解决方案6】:

        我认为对于 CLI,python 比 php 更好。

        如果你没用过PHP,我推荐Python,因为PHP最初是为web开发而设计的,用来制作动态网页,而对于Python来说,更加大方,强调代码的可读性。

        【讨论】:

        • Python 比 PHP 更好,因为它有 shutilgetopt 模块,可以简化许多 CLI 任务。你需要手动为 PHP 做这些事情。
        • 我支持 Python 推荐。如果你不幸像我一样在 Windows 环境中工作,那么用 python 编写 CLI 相对可以从一个操作系统转移到另一个操作系统。而直接使用 BASH 则不是,除非您能够使用 MINGW,而我不是。 python 的优点是能够与托管操作系统的命令行功能集成。如果你需要像上面那样使用一个衬垫,你可以很容易地从 Python 中访问它们。
        • PHP 是为 Web 设计的,这是最糟糕的说法。它作为一个 cli 工具工作得非常好,而且它支持 python 所拥有的一切,除非你是一个缩进狂热者,否则不需要使用 python。它比 php 慢,而且更神秘。至于bash,这里绝对是首选。如果需要,请使用更复​​杂的语言。
        【解决方案7】:

        对于通用任务脚本,我建议一直使用 Bash。

        Bash 可能是传播最广泛的 shell,您的脚本将能够在大多数 *nix 系统上运行。相比之下,PHP 并不总是很容易获得。当然,如果您不打算在不熟悉的系统上使用这些脚本,那么两者都可以。

        也就是说,大多数标准的 shell 命令在 bash 中比在 php 中更容易编写。在 php 中,您将打开一个子进程,通过一些包装函数执行 shell 命令,或者在 bash 中,您只需将 bash 会话记录在文件中并使其可执行。以目录列表为例,在 bash 中您只需声明 ls,而在 php 中您可能会使用 scandir,这听起来并不有趣。另外我会想象 scandir 的排序选项要少得多。 grep -Ri something . 有人吗?

        大多数通用语言都可用于 shell 脚本,但这并不意味着它们应该如此,归根结底,这归结为完成工作和主观偏好问题。

        【讨论】:

        • ls vs scandir 的好例子:)
        【解决方案8】:

        我自己正在研究这个问题,因为我目前正在对大型 LMS 进行升级,遇到了这个链接,另一个对性能测试有一些结果我想我会将此链接添加到 this 帖子。 虽然它的任务不是真实世界的示例,但它确实显示了一些有趣的统计数据。

        【讨论】:

        • 欢迎您!请在发布问题或答案之前阅读规则。
        猜你喜欢
        • 2011-09-25
        • 1970-01-01
        • 2021-12-26
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多