diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-02-21 11:11:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-21 11:11:44 +0100 |
commit | a4dde27d73c1d8219c0cc6390ef8b6e15b347edb (patch) | |
tree | 08bcdb6b3af043fa714d7ef413583b0c66181ec3 /man/90-rearrange-path.py | |
parent | 012f2b7de7137afbe7d1529ad670f51e4448b363 (diff) | |
parent | f50ce8fc4b2619d73b3118ea202b112035e713c1 (diff) |
Merge pull request #5131 from keszybz/environment-generators
Environment generators
Diffstat (limited to 'man/90-rearrange-path.py')
-rwxr-xr-x | man/90-rearrange-path.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/man/90-rearrange-path.py b/man/90-rearrange-path.py new file mode 100755 index 0000000000..c6ff32210f --- /dev/null +++ b/man/90-rearrange-path.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +""" + +Proof-of-concept systemd environment generator that makes sure that bin dirs +are always after matching sbin dirs in the path. +(Changes /sbin:/bin:/foo/bar to /bin:/sbin:/foo/bar.) + +This generator shows how to override the configuration possibly created by +earlier generators. It would be easier to write in bash, but let's have it +in Python just to prove that we can, and to serve as a template for more +interesting generators. + +""" + +import os +import pathlib + +def rearrange_bin_sbin(path): + """Make sure any pair of …/bin, …/sbin directories is in this order + + >>> rearrange_bin_sbin('/bin:/sbin:/usr/sbin:/usr/bin') + '/bin:/sbin:/usr/bin:/usr/sbin' + """ + items = [pathlib.Path(p) for p in path.split(':')] + for i in range(len(items)): + if 'sbin' in items[i].parts: + ind = items[i].parts.index('sbin') + bin = pathlib.Path(*items[i].parts[:ind], 'bin', *items[i].parts[ind+1:]) + if bin in items[i+1:]: + j = i + 1 + items[i+1:].index(bin) + items[i], items[j] = items[j], items[i] + return ':'.join(p.as_posix() for p in items) + +if __name__ == '__main__': + path = os.environ['PATH'] # This should be always set. + # If it's not, we'll just crash, we is OK too. + new = rearrange_bin_sbin(path) + if new != path: + print('PATH={}'.format(new)) |