在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