Bash
無法從腳本中取消設置環境變數
我正在嘗試從腳本中取消設置所有環境變數。該腳本執行良好,但如果我執行 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)
它也有效。
我不認為以互動方式執行命令與從腳本執行命令是否有任何區別。