【问题标题】:Shell Script For The Web用于 Web 的 Shell 脚本
【发布时间】:2011-03-14 13:33:43
【问题描述】:

我想知道是否有任何方法可以使用 Bash(Shell Script) 通过 CGI 制作网页,例如 Perl、C++ 和其他。如果有任何方法,我可以在哪里找到一个好的免费托管?

【问题讨论】:

  • 提供更多关于您正在尝试做的事情的详细信息会很有帮助。
  • 你为什么要这样做?
  • 我想像人们使用 PHP 一样使用 Shell 脚本。我想要这个,因为我想知道是否可以将我使用 Bash 完成的一些项目移植到网页。

标签: bash cgi


【解决方案1】:

这绝对是可能的,几乎任何基于 Linux(或基于 BSD,我猜)的共享主机都能够做到这一点。我已经在我便宜的 1 和 1 帐户上完成了小测试页等操作。

在我的主机上,我只是调用一个文件“foo.cgi”,然后将#!/bin/sh 行放在顶部。工作正常。当然,对于任何复杂的东西来说都是一团糟。

#!/bin/sh

cat <<banana
Content-Type: text/html

<html>
  <head>
    <title>Hello, World!</title>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>
banana

显然,真正的脚本可以做其他事情。 HTTP 信息通常在环境变量中,但我无法清楚地记得它是如何工作的,它可能会因所涉及的 Web 服务器而异。

【讨论】:

  • 那你是用CGI做的吗?为什么你使用cat。我不能用echo吗?
  • 当然可以使用echo,但是回显包含换行符的内容的语法更奇怪。
  • @Pointy:你说过你使用了 1&1。那么这就是应该与 CGI 和 Bash 合作的托管公司吗?
  • @David:您可以将cat &lt;&lt;banana 替换为echo ',将最后的banana 替换为',它的工作原理与Pointy 的 示例完全相同。您一定指的是echo -e '&lt;html&gt;\n &lt;head&gt;\n &lt;title&gt;...' 之类的东西。无论如何,printf 会比echo 更好,因为您可以更轻松地执行模板之类的操作(尽管这里的文档很容易)。
  • 您需要在其他输出之前添加类似“echo Content-type: text/html; echo”的内容。如果您的脚本没有输出一些标题后跟一个空行,则网络服务器将发送 500 错误而不是您的内容。
【解决方案2】:

这是很有可能的,在我开始做生意的时候,事情就是这样。虽然,我没有使用 bash 脚本,而是使用 perl 或 C。

真正的区别在于,PHP 提供了一种非常方便的方式来访问输入数据,就像在 bash 中一样(尽管我假设有实用程序可以帮助您),您需要解析和处理原始输入而不是 "熟”变量。

完全取决于您要完成的任务,它要么方便,要么极端。我自己使用 bash 脚本来编译包含每日新闻和漫画的主页,但该脚本不需要输入,只需要一个 cron 例程。

【讨论】:

    【解决方案3】:

    如果您不想完全重写,我建议您考虑围绕您的 shell 脚本创建一个 Python 或 PHP 包装器。让 shell 脚本做后端的事情,而包装器做剩下的事情。

    【讨论】:

      【解决方案4】:

      即使可以这样做,尝试使用 shell 脚本作为网页的预处理器也是不切实际的。我想你总是可以创建一个 Apache 处理程序来触发你的 shell 脚本,而 Apache 会从你的 shell 脚本中获取输出并将其扔回客户端。但是,以这种方式使用 shell 脚本会带来许多安全挑战(没有一个是不可克服的,但它们仍然具有挑战性)。

      【讨论】:

      • 嗯,这与使用 PHP 或 Python 并没有太大区别。
      • 嗯...有点。 Perl 和 Python 可以使用它们自己的模块(分别为mod_perlmod_wsgi)“修补”到 web 服务器中,这样解释器实际上作为服务器的一部分运行,并且它最终比必须启动一个更快每个请求的单独进程。
      • “Apache 处理程序会触发你的 shell 脚本,而 Apache 会从你的 shell 脚本中获取输出并将其扔回客户端”是这样的:en.wikipedia.org/wiki/Common_Gateway_Interface
      【解决方案5】:

      也许看看http://nanoblogger.sf.net(作为起点)!

      【讨论】:

        【解决方案6】:

        以下是在(双)引号字符串中嵌入换行符的方法:

        NL="
        "
        CR="$(printf "\r")"
        
        echo "abc${NL}def"
        
        IFS=""
        echo abc${NL}def
        
        printf "%q\n" "abc${CR}${NL}def"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-03
          • 2019-09-12
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多