我想在rakefile中使用shell命令干净地查找各种目录路径,将该值分配给变量,然后使用该变量创建目录(并在其他任务中使用)。我已将sh
代码放入任务中,并使directory
调用依赖于任务(使用file
之后的directory
调用)。但是,我无法在任务之外的任何地方使用变量(即使将其变为全局变量)。
$my_root = String.new
task :find_path do
sh %{git rev-parse --show-toplevel} do |pass, res|
if ! pass
puts "git rev-parse failed, are you in a git repo? (status = #{res.exitstatus})"
else
$my_root = res
end
end
end
$MY_DIR = "#{$my_root}/some/sub/dir"
desc "Create MY_DIR directory"
directory $MY_DIR
file $MY_DIR => :find_pmc_path
我收到以下错误:
mkdir -p /some/sub/dir
rake aborted!
当我进一步挖掘时,$ MY_DIR无法正确分配。如果我将变量赋值放在任务中,我会收到undefined method 'length' for nil:NilClass
错误。
如何查找信息,分配变量,并在rakefile中的多个其他任务中使用它?
答案 0 :(得分:1)
这似乎是namespace
声明的一个很好的用例:
namespace :top do
mydir = 'my_root'
task :find_path do
puts mydir
end
task :delete do
puts mydir
end
end
find_task:
rake top:find_path
=> my_root
删除任务:
rake top:delete
=>my_root