在rake命令末尾设置的Bash变量

在rake命令末尾设置的Bash变量,bash,rake,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_报告的更多信息,

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

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_报告的更多信息,请参阅)

Shell只需将其作为参数传递,因此第6个参数将是
CI_报告=/some/directory

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


CI\u REPORTS=/some/directory rake-f some\u rake\u file raketask1 raketask2--trace
考虑以下
rakefile

namespace :bleh do
    task :bar do
        puts ENV['FOO']
    end
end
以下各项都将打印“hello”:

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

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

export FOO="hello"
rake bleh:bar
当前shell将
FOO
设置为“hello”,并且
导出
使其对当前shell的所有子任务(子shell)可见

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


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

rake
允许您为该rake命令的执行设置环境变量()。您还可以在调用
rake
之前执行此操作,这将在
rake
执行之外设置它(并且您可能必须执行
export CI_REPORTS=…
才能让
rake
命令看到它)。哇,我喜欢stackoverflow。谢谢你清晰完整的回答。:)
FOO="hello" rake bleh:bar
export FOO="hello"
rake bleh:bar
FOO="hello"
rake bleh:bar