2014-03-31 25 views
2

如果你這樣做(在bash):bash命令行的env瓦爾

ENV_ONE=1 ENV_TWO=2 command 

command將接受並在其調用使用環境變量。但是,如果你這樣做:

ENV_ONE=1 ENV_TWO=2 clear && command 

clear會消耗ENV乏設置在命令行上,他們將不會被傳遞到指揮。

alias command='clear && command' 

我周圍的一派,我無法找到一個表示之前的命令ENV瓦爾一個bash內置的:如果你想要做這樣的事情是一個問題。我的問題是:如何將CLI聲明的env vars傳遞給第二個命令?

+0

明確然後設置它們? '清除&& ENV1 = .. ENV2 = ...命令'? –

+0

僅僅因爲你可以在沒有任何中間邏輯的情況下執行多個聲明,所以我不明白你爲什麼會這樣做,因爲它與bash中的其他任何東西都不一致。所以只需執行'ENV_ONE = 1 && ENV_TWO = 2 &&清除&&命令'或'ENV_ONE = 1; ENV_TWO = 2;清除&&命令'取決於你是否真的需要他們互相依賴 – BroSlow

+0

@BroSlow,'ENV_ONE = 1; foo'與'ENV_ONE = 1 foo'不一樣。它們做了不同的事情:前者設置了一個shell變量,即使在命令完成後該變量仍然存在;後者僅爲命令「foo」的執行設置一個環境變量。 –

回答

6

帶別名的經驗法則是「如果您必須問,請改用函數」。由於command衝突與一個內置的,我會打電話給你的命令foo

foo() { clear && command foo "[email protected]"; } 
ENV_ONE=1 ENV_TWO=2 foo 

可正常工作。

+0

+1 - 這正是我們給#bash中提出這個問題的人的答案。 –

+0

Freenode的#bash通知了大多數好的bash答案。 :P – kojiro

+0

這正是我尋找的答案!對不起,我沒有更加小心我的條款(選擇'command'作爲通用命令名稱)謝謝! –