因此,我需要防止子 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 somecommand
somecommand
在空環境下運作。您可以將參數放在 後面somecommand
。如果PATH
被刪除,您需要指定 的完整路徑somecommand
。或者,您可以保留PATH
或設定不同的值。
env -i PATH="$PATH:/another/directory" somecommand
如果您想擁有與登入後相同的環境,請僅保留一些變數並載入您的變數.profile
以設定其餘部分。如果您使用不同的登入 shell(bash 和.bash_profile
csh.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 變體上,執行相同的工作,但限制是如果某些變數的值包含換行符,它可能會發現誤報。VAR2
somecommand
env -0 | tr '\n\0' '.\n' | sed 's/=.*//'
env | sed 's/=.*//'
答案3
發出typeset +x variable_name...
或declare +x variable_name...
命令。您甚至可以使用正規表示式作為變數名稱,例如typeset +x ${!MY_VAR_*}
.