对使用 Homebrew 安装的脚本设置可执行权限

Set executable permission on script installed with Homebrew

我写了我的第一个 tap,所以我仍然不确定它是如何工作的。我写了这个小公式:

class Konversation < Formula
  desc "Konversation is a tool to generate rich and diversified responses to the user of a voice application."
  homepage "https://github.com/rewe-digital-incubator/Konversation/"
  url "https://github.com/rewe-digital-incubator/Konversation/releases/download/1.0.0/konversation-cli.jar"
  sha256 "6123d126278faae2419f5de00411a1b67ae57e0cf2265a5d484ed6f9786baaca"

  def install
    prefix.install "#{buildpath}/konversation-cli.jar"
    File.write("#{buildpath}/konversation", "java -jar #{prefix}/konversation-cli.jar $@")
    bin.install "#{buildpath}/konversation"
    system "chmod", "+x", "#{bin}/konversation"
  end
end

但是我无法 运行 我的工具,因为 "konversation" 可执行文件没有 x 权限。我试图用系统 chmod 修复它,但是我看到我的 x 标志在安装后被 brew 删除作为某种清理:

==> Cleaning
Fixing /home/linuxbrew/.linuxbrew/opt/konversation/bin/konversation permissions from 777 to 444

如何正确设置文件权限?

请注意,我不想在某个地方托管 shell 脚本本身,因为我认为将 shell 脚本和 jar 文件打包到另一个 zip 文件中没有任何进展。

如果您想自己尝试,请尝试以下命令:

brew install rekire/packages/konversation

Shell 脚本需要有一个 shebang 行,否则 postinstall cleaner 将设置其权限,就好像它不是可执行文件一样。在这种特定情况下,我建议:

  • 改用 bin.write_jar_script -- 这将为 JAR 脚本设置正确的环境
  • .jars 安装到 libexec 而不是 prefix -- 以避免不必要的文件污染前缀。

Example formula from Homebrew/homebrew-core