#!/usr/bin/env python
from os import environ, path, name as os_name, getuid
from sys import exit
from fileinput import input
update_environ = lambda: environ.update(dict(env.split('=')
for env in
open('/etc/environment', 'r').readlines()))
if os_name != 'nt' and getuid() != 0:
print "Rerun {0} as `sudo`".format(__file__)
exit(1)
def custom_vars(e_vars):
if not path.isfile('custom_vars.txt'):
return e_vars
with open('custom_vars.txt', 'r') as f:
for line in f.readline():
var = line.split()
e_vars[var[0]] = var[1]
def append_environment(e_vars):
for line in input('/etc/environment', inplace=True):
var, _, val = line.partition('=')
nline = '{var}={val}'.format(var=var, val=e_vars.pop(var, val))
if nline and nline != '=' and nline != '\n' and nline != '=\n':
print nline # inplace editing
if e_vars:
lines = filter(lambda l: l != '=\n' and nline != '\n',
['{var}={val}\n'.format(var=k, val=e_vars[k])
for k in e_vars])
with open('/etc/environment', 'a') as f:
f.writelines(lines)
if __name__ == '__main__':
environment_vars = {'NOM_REPOS': path.join(path.expanduser("~"), 'NOM'),
'NOM_API': path.join('/var', 'www')}
environment_vars = custom_vars(environment_vars)
append_environment(environment_vars)
I have written a similar script in Bash; with identical functionality:
#!/usr/bin/env bash
sudo sed -i "/^NOM*/d" /etc/environment
for i in `env | grep NOM | cut -f1 -d=`; do
unset "$i";
done
function set_var()
{
VAR="$1"
VAL="$2"
sudo sed -i "/^$VAR/d" /etc/environment
printf "$VAR=$VAL\n" | sudo tee -a /etc/environment > /dev/null
# make the variable available for use in this script and custom_env_vars.sh
export "$VAR=$VAL"
}
set_var NOM_REPOS "$HOME/NOM"
set_var NOM_API /var/www
if [ -f custom_env_vars.sh ]; then
. ./custom_env_vars.sh
else
echo "You can set custom environment variables in 'custom_env_vars.sh'"
fi
.conf
s for my web and application servers). The env vars are also used by my remote log daemons. – A T Apr 3 '14 at 10:27