【问题标题】:Combine multiple scripts in an "index.html" like fashion?像时尚一样以“index.html”组合多个脚本?
【发布时间】:2013-08-23 17:37:09
【问题描述】:

在 unixesque (sh/bash/zsh) 系统中是否有一种标准方式来执行一组脚本,就像 如果一组脚本是一个脚本一样? (想想 index.html)。关键是避免像您通常发现的额外帮助脚本,并保持小程序自给自足且更易于​​维护。

假设我有两个(粗体)ruby脚本。

/bin
/bin/foo_master
/bin/foo_master/main
/bin/foo_master/helper.rb

所以现在当我执行 foo_master

seo@macbook ~ $foo_master
[/bin/foo_master/main]: 制作 新朋友,但保持老朋友。
[/bin/foo_master/helper.rb]:一个 是银,另一个是金。

【问题讨论】:

    标签: unix scripting bin


    【解决方案1】:

    如果您尝试这样做而不创建帮助脚本,典型的方法是执行这两个(注意:我将使用: $; 来表示shell提示):

    : $; ./main; ./helper.rb
    

    现在,如果您想将两者的输出捕获到一个文件中,例如,您可以将它们组合成一个带括号的subshell,然后像捕获单个命令一样捕获子shell 的输出,就像这样:

    : $; (./main; ./helper.rb) > index.html
    

    这就是你所追求的吗?我有点不清楚你的最终目标是什么。如果你想让这成为一个高度可重复的事情,那么可能会想要创建一个包装器命令......但如果你只想将两个命令作为一个运行,你可以执行上述两个选项之一,它应该可以工作对于大多数情况。 (不过,如果我错过了您所追求的内容,请随意扩展问题。)

    【讨论】:

      【解决方案2】:

      我想出了如何以半标准的投诉方式做到这一点。

      我在 shell 脚本中使用 eval 语法在运行时对 $PATH 进行 lambda 评估。所以在我的 /etc/.zshrc

      $REALPATH = $PATH
      $PATH = $REALPATH:`find_paths`
      

      其中 find_paths 是递归搜索 $PATH 目录中文件夹的函数(下面的伪代码)

      ($PATH 中的 foreach 路径 => ls -d -- */)



      所以我们从这里开始:

      seo@macbook $ echo $PATH
      /bin/:/usr/bin/

      对此,自动:

      seo@macbook $ echo $PATH
      /bin/:/usr/bin/:/bin/foo_master/

      现在我只需将 main 重命名为“foo_master”,瞧!自包含可执行文件,我敢说“应用程序”。

      【讨论】:

        【解决方案3】:

        是的,这很简单!

        #!/bin/bash
        
        /bin/foo_master/main
        /bin/foo_master/helper.rb
        

        将文件保存为 foo_master.sh 并在 shell 中输入:

        seo@macbook ~ $sudo chmod +x foo_master.sh
        

        然后运行类型:

        seo@macbook ~ $./foo_master.sh
        

        编辑:

        在任何给定目录中提供 index.html 文件的原因是 HTTP 服务器明确地寻找一个。 (在服务器配置文件中,您可以指定要在服务器上查找的文件的名称,例如 index.html,即 index.php index.htm foo.html 等)。因此它并不神奇。在某些时候,“帮助脚本”会显式查找文件。我不认为编写像上面这样的脚本是可以跳过的步骤。

        【讨论】:

        • 这是我见过的常见模式。我正在寻找一种没有帮助程序可执行文件的方法。就好像目录本身是可执行文件一样。 OS X 通过允许所有 *.app 文件 (FooMaster.app/Content/MacOS/foo_master) 的标准化二进制加载路径在其应用程序中支持此范例。
        • 啊,我明白了。我喜欢这个想法。
        • @seo 我的猜测是提供 index.html 是 HTTP 服务器的一部分。只需在文件夹中查找 index.html 文件即可。必须是这种情况,因为您在服务器配置中提供了索引文件名列表。因此,即使在 html 的情况下,您所称的“帮助”应用程序仍然存在,只是隐藏在 HTTP 服务器中。
        猜你喜欢
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多