在rake命令结束时设置Bash变量

时间:2013-09-28 00:08:12

标签: bash rake

我在脚本中看到了这一点:

rake -f some_rake_file raketask1 raketask2 --trace CI_REPORTS=/some/directory

CI_REPORTS是一个bash shell变量。它与rake命令在同一行的语句末尾设置。这是如何运作的?我希望看到这个:

CI_REPORTS=/some/directory
rake -f some_rake_file raketask1 raketask2 --trace

(有关CI_REPORTS的更多信息,请参阅http://caldersphere.rubyforge.org/ci_reporter/

2 个答案:

答案 0 :(得分:3)

考虑以下rakefile

namespace :bleh do
    task :bar do
        puts ENV['FOO']
    end
end

以下各项将打印“你好”:

rake bleh:bar FOO="hello"

这将FOO作为变量传递给rake,并将其视为shell环境变量。调用shell不会将其视为shell变量,但rake将设置其ENV结构,就像它一样。 (见rake documentation)。

FOO="hello" rake bleh:bar

shell将FOO设置为仅用于执行rake的环境变量。任务完成后,shell中不再设置FOO

export FOO="hello"
rake bleh:bar

当前shell将FOO设置为“hello”,export使所有当前shell的子任务(子shell)都可以看到。

但是,以下内容不会打印任何内容(空白):

FOO="hello"
rake bleh:bar

在这种情况下,FOO在此上下文中不会显示rake(它尚未导出到子任务)。

答案 1 :(得分:1)

Shells只会将其作为参数传递,因此第6个参数将为CI_REPORTS=/some/directory

如果要设置环境变量,请更改顺序:

CI_REPORTS=/some/directory rake -f some_rake_file raketask1 raketask2 --trace