如何將環境變量傳遞給我使用Kernel#system
等執行的shell命令?需要爲back-ticks命令設置環境變量
說,我想運行
%x{git checkout -f}
,但這個命令依賴於環境變量$GIT_WORK_TREE
。我該如何設置它?
如何將環境變量傳遞給我使用Kernel#system
等執行的shell命令?需要爲back-ticks命令設置環境變量
說,我想運行
%x{git checkout -f}
,但這個命令依賴於環境變量$GIT_WORK_TREE
。我該如何設置它?
您應該能夠設置在Ruby的ENV
哈希變量調用子shell:
ENV['GIT_WORK_TREE'] = 'foo'
`echo $GIT_WORK_TREE`
應該返回「富」。
有關更多信息,請參閱ENV[]=
文檔。
[1] (pry) main: 0> ENV['GIT_WORK_TREE'] = 'foo' "foo" [2] (pry) main: 0> `echo $GIT_WORK_TREE` "foo\n"
您可以使用Process.spawn
設置環境:前
spawn({'GIT_WORK_TREE' => '/foo/bar'}, "git checkout -f")
感謝。我需要在'git'後面運行更多的命令,我可以避免將它們放到'.sh'文件中嗎?可以這麼說,我希望寫一個紅寶石外殼腳本。 – akonsu 2013-04-21 04:27:14
啊,從你說的話的方式來看,我認爲你的確意思是隻爲一個shell命令重寫一個變量。 – 2013-04-21 04:35:03
這是工作,我正要說同樣的事情,並做了一個快速檢查,以確保。 – 2013-04-21 04:30:58
的確,謝謝! – akonsu 2013-04-21 04:31:16
作爲一個特別但不好的情況,請注意您的平臺可能會在啓動子shell之前刪除一些環境變量。例如,[macOS在分叉時清除DYLD_ * env vars](https://apple.stackexchange.com/questions/212945/unable-to-set-dyld-fallback-library-path-in-shell-on-osx- 10-11-1)。 – hmijail 2017-02-28 11:18:56