如何防止導出的環境變數被子 shell (bash) 識別/存取?

如何防止導出的環境變數被子 shell (bash) 識別/存取?

因此,我需要防止子 shell 識別導出的變數負載。

問題是應用程式(Wine+UDK) 不會在環境中建立具有太多(>65535) 位元組的項目,而在我使用在任何bash 之間共享環境變數的項目(ScriptEchoColor) 後,我的專案有很多(95323) 個位元組貝殼。

我找不到允許我產生子 shell 的命令,該子 shell 不接受當前的環境變量,而是僅使用在我的使用者設定檔和整個系統上設定的變數。

我嘗試了許多選項,如圖所示bash --help

答案1

您可以使用該env命令在乾淨的環境中啟動進程。這是一個例子:

env -i /bin/myprog

如果您仍然需要匯出一些變量,您可以在呼叫中執行此操作:

env -i MYVAR=foo /bin/myprog

env 指令是必要的POSIX

答案2

env -i somecommandsomecommand在空環境下運作。您可以將參數放在 後面somecommand。如果PATH被刪除,您需要指定 的完整路徑somecommand。或者,您可以保留PATH或設定不同的值。

env -i PATH="$PATH:/another/directory" somecommand

如果您想擁有與登入後相同的環境,請僅保留一些變數並載入您的變數.profile以設定其餘部分。如果您使用不同的登入 shell(bash 和.bash_profilecsh.login等),請進行相應調整。

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

或者,您可能更願意從環境中刪除一些變數。從環境中env -u VAR1 -u VAR2 somecommand刪除VAR1和並運行.在 Linux 下,您可以使用產生一個每行一個名稱的環境變數列表,適合篩選。在其他 UNIX 變體上,執行相同的工作,但限制是如果某些變數的值包含換行符,它可能會發現誤報。VAR2somecommandenv -0 | tr '\n\0' '.\n' | sed 's/=.*//'env | sed 's/=.*//'

答案3

發出typeset +x variable_name...declare +x variable_name...命令。您甚至可以使用正規表示式作為變數名稱,例如typeset +x ${!MY_VAR_*}.

相關內容