首页 > 解决方案 > 如何从 ruby​​gem 命令行工具调用 shell 文件

问题描述

我有一个需要运行 shell 脚本的命令。shell 文件位于 gem 根文件夹中。当我执行完整路径时,一切正常,但无法获取根路径。

从运行脚本project_creator.rb

我用于测试

system("sh /Users/user_name/folder/gem-project/lib/gem/create.sh" + param)

试过:

system("sh ../lib/gem/create.sh" + param)

在此处输入图像描述

标签: ruby-on-railsrubyshellcommand-linerubygems

解决方案


用于__dir__获取 Ruby 文件的目录。从文档

返回调用此方法的文件目录的规范化绝对路径。这意味着路径中的符号链接已解决。如果__FILE__为 nil,则返回 nil。返回值等于File.dirname(File.realpath(__FILE__))

因此,在您的示例中,您可能会执行以下操作:

script = File.join(__dir__, '..', 'create.sh')
exit_code = system("sh #{script")

您还可以使用以下命令设置 cwd(当前工作目录)system

system("create.sh", chdir: __dir__)

或者:

Dir.chdir(__dir__) { system('create.sh') }

推荐阅读