Уважай umask
какchmod +x
man chmod
говорит, что если augo
не дается как в:
chmod +x mypath
then a
используется, но с umask
:
Комбинация букв ugoa определяет, у каких пользователей будет изменен доступ к файлу: пользователь, которому он принадлежит (u), другие пользователи в группе файла (g), другие пользователи, не входящие в группу файла (o), или все пользователи (а). Если ничего из этого не задано, эффект будет таким, как если бы был задан (a), но биты, которые установлены в umask, не затронуты.
Вот версия, которая точно имитирует это поведение:
#!/usr/bin/env python3
import os
import stat
def get_umask():
umask = os.umask(0)
os.umask(umask)
return umask
def chmod_plus_x(path):
os.chmod(
path,
os.stat(path).st_mode |
(
(
stat.S_IXUSR |
stat.S_IXGRP |
stat.S_IXOTH
)
& ~get_umask()
)
)
chmod_plus_x('.gitignore')
См. Также: Как получить права доступа к файлам по умолчанию в Python?
Протестировано в Ubuntu 16.04, Python 3.5.2.