| 
861
 | 
     1 # source it
 | 
| 
 | 
     2 
 | 
| 
 | 
     3 export_var() {
 | 
| 
 | 
     4     if [[ "$#" != "2" ]]
 | 
| 
 | 
     5     then
 | 
| 
 | 
     6         echo "Must be called with two arguments"
 | 
| 
 | 
     7         return 1
 | 
| 
 | 
     8     fi
 | 
| 
 | 
     9     # https://serverfault.com/questions/7503/how-to-determine-if-a-bash-variable-is-empty/382740#382740
 | 
| 
 | 
    10     local KEY=$1
 | 
| 
 | 
    11     local VALUE="${!KEY}"
 | 
| 
 | 
    12     if [[ -n "${!KEY+set}" ]];
 | 
| 
 | 
    13     then
 | 
| 
 | 
    14         _OLD_VARS+=( "${KEY}" )
 | 
| 
 | 
    15         _OLD_VALS+=( "${VALUE}" )
 | 
| 
 | 
    16     else
 | 
| 
 | 
    17         _OLD_UNSET+=( "${KEY}" )
 | 
| 
 | 
    18     fi
 | 
| 
 | 
    19     export "${1}=${2}"
 | 
| 
 | 
    20 }
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 export_var BROWSER firefox
 | 
| 
 | 
    23 
 | 
| 
 | 
    24 deactivate() {
 | 
| 
 | 
    25     local index=0
 | 
| 
 | 
    26     for key in "${_OLD_VARS[@]}"
 | 
| 
 | 
    27     do
 | 
| 
 | 
    28         local value="${_OLD_VALS[$index]}"
 | 
| 
 | 
    29         export "$key=$value"
 | 
| 
 | 
    30         index=$((index+1))
 | 
| 
 | 
    31     done
 | 
| 
 | 
    32     for var in "${_OLD_UNSET[@]}"
 | 
| 
 | 
    33     do
 | 
| 
 | 
    34         unset "${var}"
 | 
| 
 | 
    35     done
 | 
| 
 | 
    36     unset deactivate
 | 
| 
 | 
    37 }
 |