Como configurar o bit executável para um arquivo específico automaticamente

10

Eu quero que quando eu criar um arquivo específico, suponha que eu o crie no editor vim, o arquivo criado também deverá ter permissão executável quando for criado. Eu quero isso como eu estou criando alguns arquivos python e não quer explicitamente definir permissões para o arquivo, então eu quero alguma maneira para que o bit executável é definido assim que eu criar um arquivo com extensão particular ou com um editor particular.

    
por mandeep 21.08.2012 / 16:38

2 respostas

11

Para o vim, você tem scripts poderosos disponíveis. Por exemplo, no meu .vimrc, eu tenho:

" 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>

Se você quiser fazer isso apenas pelo nome do arquivo, em vez de procurar pelo #! linha, você poderia fazer:

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

Esse artigo sobre Administração Debian também tem instruções para o EMACS.

    
por 21.08.2012 / 18:04
1

Por mais que eu goste da resposta do derobert , isso faz com que o VIM me dê o seguinte aviso:

W16: Warning: Mode of file "test.sh" has changed since editing started

O seguinte código (um pouco mais longo) resolve esse problema (requer um vim habilitado para Python):

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()
    
por 08.11.2012 / 17:08