Bash

無法從腳本中取消設置環境變數

  • December 29, 2010

我正在嘗試從腳本中取消設置所有環境變數。該腳本執行良好,但如果我執行 env 它仍然顯示所有變數集。

如果我從 CLI 執行命令,它可以工作並且變數未設置。

unset `env | awk -F= '/^\w/ {print $1}' | xargs`

知道如何從腳本執行它嗎?

另外,知道如何從腳本中獲取 /etc/profile 嗎?這也不起作用。

我需要設置名稱相同但路徑不同的變數,具體取決於我的使用者需要的實例。

後來編輯:

好的,我最終得到了這個(相當不優雅,但無論如何)解決方案:

. script 

其中包含:

unset `env | awk -F= '/^\w/ {print $1}'|egrep -v "HOSTNAME|TERM|SHELL|HISTSIZE|SSH_CLIENT|SSH_TTY|USER|LS_COLORS|KDEDIR|MAIL|PATH|INPUTRC|PWD|LANG|HISTIGNORE|SSH_ASKPASS|TEST|SHLVL|HOME|LD_ASSUME_KERNEL|LOGNAME|SSH_CONNECTION|LESSOPEN|HISTTIMEFORMAT|G_BROKEN_FILENAMES|_"|xargs`
source env_variable_file

謝謝!

基本上,這是一個標準答案。你不能這樣做,因為腳本在一個新的子程序中執行。該程序擁有自己的環境,並且無法更改父程序的環境,無論是設置變數還是取消設置它們。

.您可以使用命令在目前環境中執行腳本。您可以以相同的方式獲取 /etc/profile :

. /etc/profile

我試圖執行你的腳本,但它對我不起作用。

我Google了一下,發現了這個:

unset $(/usr/bin/env | egrep '^(\w+)=(.*)$' | \
egrep -vw 'PWD|USER|LANG' | /usr/bin/cut -d= -f1);

這個確實有效;-)

用於採購文件

source /etc/profile

是你說的正確方法。

如果我這樣修改你的腳本

unset $(env | awk -F= '{print $1}' | xargs)

它也有效。

我不認為以互動方式執行命令與從腳本執行命令是否有任何區別。

引用自:https://serverfault.com/questions/217053