2017-08-10 84 views
2

這裏有很多例子說明如何在bash中獲取一個dotenv文件,但是任何人都可以使用破折號(這是最小的Debian安裝的默認shell)實現相同的方法?如何在短劃線中輸入一個dotenv(.env)文件?

該解決方案應該是這樣的:

$ some foo my-command-using-env-vars 

例如

$ env $(cat .env) my-command-using-env-vars 

而且重要的是,該解決方案支持多值中包含空格:引號內

SSH_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nfoo\nbar\baz" 

和特殊字符,例如哈希:

SPECIAL="foo#bar" 

回答

2

看來,你的問題不是太多,你使用dash但你想支持\n轉義。在dash下工作,支持\n逃逸:

eval "$(echo $(cat .env))" my-command-using-env-vars 

這是因爲不像bash內置在dashecho支持反斜槓即使沒有-e選項。在這兩個bashdash下工作,提供了非內置的系統echo支持-e選項:

eval "$(env echo -e $(cat .env))" my-command-using-env-vars 

注意,這兩種方法也將處理其他反斜槓(無論是POSIX或GNU),可能以不同於你的期望的方式。

一些技術說明:

$(cat .env) 

執行Field Splitting,將任何換行符在文件.env成空格。

"$(env echo -e ...)" 

膨脹反斜線通過經由env調用echo -e不管當前殼的逸出。雙引號禁用字段拆分,以便保留換行符。

+0

感謝您的解決方案!只是爲了好奇,在上述情況下如何處理另一個反斜槓? –

+0

@BastianVenthur查看'dash'和'bash'手冊頁並搜索內置命令。對於'env echo',請參閱'echo'手冊頁。 – nwellnhof

相關問題