mirror of
https://github.com/systemd/systemd
synced 2024-11-05 18:25:39 +00:00
3e67e5c992
This is useful on systems like NixOS, where python3 is not in /usr/bin/python3 as well as for people using alternative ways to install python such as virtualenv/pyenv.
40 lines
1.4 KiB
Python
Executable file
40 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env 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))
|