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

10

Eu quero que quando eu criar um arquivo específico, suponha que ele seja criado no editor vim, o arquivo criado também receba permissão executável quando for criado. Eu quero isso, pois estou criando alguns arquivos python e não quero definir explicitamente as permissões para o arquivo, por isso quero uma maneira para que o bit executável seja definido assim que eu criar um arquivo com extensão específica ou com um editor específico.

mandíbula
fonte

Respostas:

11

Para o vim, você tem scripts poderosos disponíveis. Por exemplo, no meu .vimrc, 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 fazê-lo apenas pelo nome do arquivo, em vez de procurar o #! linha, você pode fazer:

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

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

derobert
fonte
qual é a sua leitura automática definida para então?
Dustin
@dustin Autoread está definido (true / on / yes) no meu vimrc (AFAIK, é apenas um booleano, a sua ligado ou desligado)
derobert
1

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

W16: aviso: o modo do arquivo "test.sh" mudou desde o início da edição

O código a seguir (um pouco mais longo) resolve esse problema (requer um vim ativado por 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()
Søren Løvborg
fonte
Ah, provavelmente não recebo esse aviso conforme autoreaddefinido.
Derobert 26/12/12
Estou confuso que silencia o aviso, porque parece fazer exatamente a mesma coisa, apenas chamando um script python em vez de chmod ...
derobert
Sim. Mas, por algum motivo, a função Python não aciona a detecção de alteração de modo. Pode ser uma peculiaridade da minha configuração, embora eu acredite estar executando um Vim bastante baunilha na instalação do Ubuntu.
Søren Løvborg