我想将一些shell脚本+支持文件打包成一个自制公式,在用户$PATH
的某处安装这些脚本。我将从自己的水龙头中提供配方。
通过formula cookbook阅读示例似乎假设上游库中的cmake或autotools系统。如果我的项目只包含一些脚本和配置文件怎么办?我应该只将其手动复制到公式中的#{prefix}/
吗?
答案 0 :(得分:0)
这里有两种情况:
使用bin
在bin.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 variables或execute a .jar
。