Tôn trọng umask
nhưchmod +x
man chmod
nói rằng nếu augo
không được đưa ra như trong:
chmod +x mypath
sau đó a
được sử dụng nhưng với umask
:
Tổ hợp các chữ cái ugoa kiểm soát quyền truy cập của người dùng vào tệp sẽ bị thay đổi: người dùng sở hữu nó (u), những người dùng khác trong nhóm của tệp (g), những người dùng khác không thuộc nhóm của tệp (o) hoặc tất cả người dùng (a). Nếu không có cái nào trong số này được đưa ra, hiệu ứng giống như (a) được đưa ra, nhưng các bit được đặt trong umask không bị ảnh hưởng.
Đây là phiên bản mô phỏng chính xác hành vi đó:
#!/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')
Xem thêm: Làm cách nào để nhận quyền truy cập tệp mặc định trong Python?
Đã thử nghiệm trong Ubuntu 16.04, Python 3.5.2.