如何仅使用脚本

时间:2017-09-28 21:23:37

标签: homebrew

我想将一些shell脚本+支持文件打包成一个自制公式,在用户$PATH的某处安装这些脚本。我将从自己的水龙头中提供配方。

通过formula cookbook阅读示例似乎假设上游库中的cmake或autotools系统。如果我的项目只包含一些脚本和配置文件怎么办?我应该只将其手动复制到公式中的#{prefix}/吗?

1 个答案:

答案 0 :(得分:0)

这里有两种情况:

独立脚本

使用binbin.install下安装它们。您可以选择重命名它们,例如剥离扩展名:

class MyFormula < Formula
  # ...

  def install
    # move 'myscript.sh' under #{prefix}/bin/
    bin.install "myscript.sh"

    # move 'myscript.sh' to #{prefix}/bin/mybettername
    bin.install "myscript.sh" => "mybettername"

    # move *.sh under bin/
    bin.install Dir["*.sh"]
  end
end

带有支持文件的脚本

这种情况很棘手,因为你需要让所有路径都正确。最简单的方法是在#{libexec}/下安装所有内容,然后在exec下编写#{bin}/个脚本。这是Homebrew公式中非常常见的模式。

class MyFormula < Formula
  # ...

  def install
    # Move everything under #{libexec}/
    libexec.install Dir["*"]

    # Then write executables under #{bin}/
    bin.write_exec_script (libexec/"myscript.sh")
  end
end

给定包含以下内容的tarball(或git repo):

  • script.sh
  • supportfile.txt

上述公式将创建以下层次结构:

#{prefix}/
  libexec/
    script.sh
    supportfile.txt
  bin/
    script.sh

Homebrew使用以下内容创建#{prefix}/bin/script.sh

#!/bin/bash
exec "#{libexec}/script.sh" "$@"

这意味着您的脚本可以在其自己的目录中拥有支持文件,同时不会污染bin/ ,而不会对安装路径做出任何假设(例如,您不需要在脚本中使用../libexec/supportfile.txt等内容。

有关使用Ruby脚本的示例,请参阅this answer of mine,有关联机帮助页的示例,请参阅that one

注意Homebrew也有其他帮手,例如不仅要编写exec脚本,还要编写set environment variablesexecute a .jar