我正在使用Ruby进行演示命令行项目。结构是这样的:
/ROOT_DIR
init.rb
/SCRIPT_DIR
(other scripts and files)
我希望用户只使用init.rb
进入应用程序,但就目前而言,任何人都可以进入子文件夹并直接调用其他ruby脚本。
问题:
答案 0 :(得分:2)
您无法使用文件权限执行此操作,因为用户需要读取文件;删除read
权限意味着您也无法包含该权限。删除execute
权限有助于表明这些文件不会被执行,但不会阻止用户输入ruby incl.rb
。
最简单的方法可能是在init.rb
脚本中设置一个全局变量:
#!/usr/bin/env ruby
FROM_INIT = true
require './incl.rb'
puts 'This is init!'
然后检查是否在包含的incl.rb
文件中定义了此变量:
unless defined? FROM_INIT
puts 'Must be called from init.rb'
exit 0
end
puts 'This is incl!'
第二种方法可能是检查$PROGRAM_NAME
中incl.rb
的值;这将存储当前程序名称(如许多其他语言中的argv[0]
):
unless $PROGRAM_NAME.end_with? 'init.rb'
puts 'Must be called from init.rb'
exit 0
end
我不推荐这个,因为它不是很有前瞻性;如果您想重命名init.rb
或制作第二个脚本,该怎么办?