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.

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.


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()

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.