如何在Ruby中实现类似Bash source的函数复用机制?
Ruby实现跨脚本函数调用的正确方法
错误原因说明
你用Bash的source命令加载Ruby脚本是行不通的——source是让当前Shell进程执行脚本内容,但Ruby代码不属于Shell命令语法,Shell无法解析,自然会报错。
两种正确实现方式
场景1:纯Ruby脚本间调用函数
如果是在Ruby脚本里调用另一个Ruby脚本定义的函数,用Ruby的require_relative或load命令加载目标脚本即可:
test1.rb(定义函数)
def doThing puts "Doing Thing" end
test2.rb(调用函数)
# 加载同目录下的test1.rb,相对路径用require_relative更方便 require_relative './test1.rb' # 直接调用函数 doThing
运行方式:在终端执行 ruby test2.rb,就能输出Doing Thing。
require_relative:按当前脚本的相对路径加载文件,加载后不会重复加载(适合复用库脚本)load:每次调用都会重新加载脚本内容(适合需要动态更新代码的场景)
场景2:在Shell脚本中调用Ruby函数
如果要在Shell脚本里调用Ruby定义的函数,需要通过Ruby解释器来执行,不能直接用Shell命令调用。修改test2.sh如下:
test2.sh
ruby -e "require_relative './test1.rb'; doThing"
运行方式:给test2.sh加执行权限(chmod +x test2.sh),然后执行./test2.sh即可。
内容的提问来源于stack exchange,提问作者Tiny Tim
相关产品推荐
相关产品推荐

