gpt4 book ai didi

ruby - 有没有像使用 ruby​​gems 分发非 ruby​​ 脚本的既定方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:05 25 4
gpt4 key购买 nike

如果我在 gem 中添加一个 bash 脚本作为可执行文件,安装 gem 会导致可执行文件被包裹在类似这样的东西中:

#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'my_bash_script' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0.a"

if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
version = $1
ARGV.shift
end
end

gem 'my_bash_script', version
load Gem.bin_path('my_bash_script', 'my_bash_script', version)

这使它功能失调,因为 ruby​​ 解释器显然不会说 bash。

处理这个问题的好方法是什么?我可以关闭包装吗(最好,因为 bash 的启动速度比 YARV ruby​​ 解释器快大约 12 倍),或者我是否需要将我的 bash 包装在 ruby​​ 中,以便生成的加载包装器能够正常运行?

最佳答案

我在 ruby​​gem 存储库的一个 ticket discussions 中找到了以下答案.

我不知道有什么好的方法可以跨平台工作并且有意义。Rubygems 适用于 ruby 。如果一个文件在你的 gem 的 bindir 中并且被列为 gem 可执行文件,它应该是 ruby​​。如果您的 gem 有“特殊需求”,那么它应该在带外完成,比如创建一个 Rakefile 来为您执行特殊步骤,并将 Rakefile 列为规范中的扩展。或者只是使用安装后消息告诉人们使用 --no-wrapper 安装。

我还在 rubygems specification documentation 中发现了以下评论.

# # 例如,rake gem 将 rake 作为可执行文件。你没有指定 # 完整路径(如 bin/rake);所有应用程序样式的文件都应该是- # 在 bindir 中找到。+ # 在 bindir 中找到。这些文件必须是可执行的 ruby​​ 文件。文件+ # 使用 bash 或其他解释器将不起作用。 #

希望这些信息对您有所帮助。

关于ruby - 有没有像使用 ruby​​gems 分发非 ruby​​ 脚本的既定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com