Capistrano来源中的<< -CMD是什么?

时间:2014-12-18 17:40:18

标签: ruby-on-rails ruby capistrano

在capistrano 2.15.5 deploy:assets source中,我看到的代码如下:

desc <<-DESC
  [internal] This task will set up a symlink to the shared directory \
  ... more
DESC

run <<-CMD.compact
  rm -rf #{latest_release}/public/#{assets_prefix} &&
  ... more
CMD

这种语法究竟发生了什么?它看起来像是一种不带引号的字符串写法,类似于%q。 <<-是运营商吗?或者<<-CMD<<-DESC奇怪地命名常量?或者这在普通的Ruby中没有任何意义,而是Capistrano DSL的一个特性?

1 个答案:

答案 0 :(得分:6)

这种语法称为heredoc或here文档(因为它包含在“此处”),实际上是一种编写没有引号的长多行字符串的方法。它不是特定于Capistrano,而是Ruby(以及许多其他语言)的一部分,可以追溯到旧的UNIX shell。如果您想了解更多信息,Ruby docs可以获得所有细节。