如何自动设置特定文件的可执行位

如何自动设置特定文件的可执行位

我希望当我创建一个特定文件时,假设我在 vim 编辑器中创建它,创建的文件在创建时也应该获得可执行权限。我想要这个,因为我正在创建一些 python 文件,并且不想显式设置该文件的权限,所以我想要某种方式,以便在我创建具有特定扩展名或使用特定编辑器的文件时立即设置可执行位。

答案1

对于 vim,您可以使用强大的脚本。例如,在我的 .vimrc 中,我有:

" Stolen from http://www.debian-administration.org/articles/571
" Sets +x on stuff starting with the magic shebang.
au BufWritePost * if getline(1) =~ "^#!" | silent !chmod a+x <afile>

如果您只想通过文件名来执行此操作,而不是寻找 #!线,你可以这样做:

au BufWritePost *.ext silent !chmod a+x <afile>     " untested

关于 Debian 管理的文章还有 EMACS 的说明。

答案2

我喜欢多少就多少德罗伯特的回答,这会导致 VIM 给我以下警告:

W16:警告:自编辑开始以来,文件“test.sh”的模式已更改

以下(稍长)代码解决了该问题(需要支持 Python 的 vim):

function! SetExecutableBit()
python <<EOD
import vim
import os
import stat
filename = vim.current.buffer.name
mode = os.stat(filename).st_mode
os.chmod(filename, mode | stat.S_IXUSR)
EOD
endfunction

autocmd BufWritePost *
    \ if getline(1) =~ "^#!" | call SetExecutableBit()

答案3

我来到这里是因为我想自动将可执行位设置为从网络传输到系统的二进制文件。是否可以?谢谢!

相关内容