2013-09-28 2 views
1

Я вижу это в скрипте:Bash переменная устанавливается в конце команды граблей

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

CI_REPORTS является переменной Баш оболочки. Он устанавливается в конце инструкции в той же строке, что и команда rake. Как это работает? Я ожидал увидеть это:

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

(см http://caldersphere.rubyforge.org/ci_reporter/ Более подробную информацию о CI_REPORTS)

+0

'rake' позволяет вам установить переменную окружения для выполнения этой команды rake (http://www.rubyrake.org/user_guide/chapter02.html). Вы также можете сделать это, прежде чем вызывать 'rake', который установил бы его вне выполнения' rake' (и вам может потребоваться «export CI_REPORTS = ...» для команды 'rake', чтобы увидеть его). – lurker

ответ

2

Рассмотрим следующий rakefile:

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

Каждая из следующих напечатает "привет":

rake bleh:bar FOO="hello" 

Это проходит FOO как переменная до rake, и она рассматривает ее как переменную среды оболочки. Вызывающая оболочка не видит ее как переменную оболочки, но rake настроит свою структуру ENV так, как если бы она была. (См. rake documentation).

FOO="hello" rake bleh:bar 

Оболочка устанавливает FOO в качестве переменной среды только для выполнения rake. После завершения задачи FOO больше не установлен в оболочке.

export FOO="hello" 
rake bleh:bar 

В настоящее время оболочка имеет FOO набор для «привет» и export делает его видимым для всех подзадач текущего интерпретатора (Подоболочки).

Однако следующий не будет печатать ничего (пустой):

FOO="hello" 
rake bleh:bar 

В этом случае FOO не видно rake в этом контексте (он не экспортируется в подзадач).

+0

Wow, gotta love stackoverflow. Благодарим вас за четкий и полный ответ. :) –

1

Корпуса просто передать его в качестве параметра, поэтому шестой параметр будет CI_REPORTS=/some/directory.

Если вы хотите установить переменную окружения, изменить порядок:

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

Смежные вопросы