Respeito umask
comochmod +x
man chmod
diz que se augo
não for fornecido como em:
chmod +x mypath
então a
é usado, mas com umask
:
Uma combinação das letras ugoa controla quais usuários o acesso ao arquivo será alterado: o usuário que o possui (u), outros usuários no grupo do arquivo (g), outros usuários que não estão no grupo do arquivo (o) ou todos usuários (a). Se nenhum desses for dado, o efeito é como se (a) fosse dado, mas os bits que são configurados no umask não são afetados.
Esta é uma versão que simula exatamente esse comportamento:
#!/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')
Consulte também: Como posso obter as permissões de arquivo padrão em Python?
Testado no Ubuntu 16.04, Python 3.5.2.