2

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

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/ )

4

2 回答 2

4

考虑以下内容rakefile

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

以下每一项都将打印“hello”:

rake bleh:bar FOO="hello"

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

FOO="hello" rake bleh:bar

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

export FOO="hello"
rake bleh:bar

当前 shell 已FOO设置为“hello”,并export使其对当前 shell 的所有子任务(子 shell)可见。

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

FOO="hello"
rake bleh:bar

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

于 2013-09-28T00:28:55.593 回答
1

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

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

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

于 2013-09-28T00:11:09.653 回答