2015-07-03 127 views
0

我一直在使用nodejs中的spawn運行可執行文件,現在當我嘗試使用spawn運行ubuntu命令(如unset,export等)時,它們看起來不像上班。我猜是因爲它正在尋找可執行文件。 我甚至嘗試過exec,這似乎不起作用。有小費嗎?如何從Nodejs運行Linux/Ubuntu命令(不可執行文件)

我有一個ubuntu設備運行節點,從UI我需要爲代理設置/取消設置env變量,例如http_proxy和no_proxy。除了出口以外,我還可以通過節點做什麼? env變量應該被設置爲系統範圍,而不僅僅是當前進程。

+2

這些是shell內置的,而不是可執行文件。聽起來像一個XY問題,但你究竟想要做什麼? – robertklep

+0

是的,他們是殼內置的,我想設置和取消設置env變量。我可以在命令前添加bash或sh,並通過產卵運行? –

+1

你見過''spawn''(https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)的'env'選項嗎? – robertklep

回答

1

環境變量只存在於內存中,並且是進程本地的。對於任何正在運行的進程,只有進程本身可以更改「屬於」該進程的一組環境變量,但這些更改不會傳播到現有的子進程或父進程。

簡而言之:您無法更改將應用​​於系統上所有進程的環境變量(甚至不是來自常規shell)。

,使其成爲可供新建子進程(子進程默認繼承其父的設置環境變量),你只能設置一個環境變量,但僅此而已。

如果你有過怎樣要求這些特定環境的過程變量開始控制,你可以這些變量的值寫入(從節點)的文件和源該文件中的其他進程正在啓動權之前,但是這實際上取決於實際使用情況,這是否可用。

+0

我的用例是設置env變量並使'request'模塊使用env變量。 https://www.npmjs.com/package/request#proxies。根據文檔請求尊重像'http_proxy'這樣的env變量,我已經在/ etc/profile文件中設置了env變量,但這需要重啓設備。 –

+0

@monotheist並且您正在從不從UI服務器啓動的單獨進程運行'request',我想?爲什麼不將代理設置寫入(JSON)文件並從您調用'request'的進程加載? – robertklep

+0

沒有請求是來自同一個進程,所以這意味着'請求'將在設置beign之後兌現env變量。我已經將代理設置寫入json文件。請求也需要'代理'參數,所以如果它通過設置env變量不起作用,我會從json中讀取它並傳遞給請求。 –