Cómo configurar automáticamente un bit ejecutable para un archivo en particular

10

Quiero que cuando haga crear un archivo en particular, suponga que lo creo en el editor vim, el archivo creado también debería tener permiso ejecutable cuando se cree. Quiero esto porque estoy creando algunos archivos de Python y no quiero establecer explícitamente los permisos para el archivo, así que quiero de alguna manera que el bit ejecutable se establezca tan pronto como cree un archivo con una extensión particular o con un editor particular.

mandeep
fuente

Respuestas:

11

Para vim, tiene una potente secuencia de comandos disponible. Por ejemplo, en mi .vimrc, tengo:

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

Si desea hacerlo solo por nombre de archivo, en lugar de buscar el #! línea, podrías hacer:

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

Ese artículo sobre la Administración de Debian también tiene instrucciones para EMACS.

derobert
fuente
¿Para qué está configurado su auto lectura?
dustin
@dustin autoread está configurado (verdadero / encendido / sí) en mi vimrc (AFAIK, es solo un booleano, está encendido o apagado)
derobert
1

Por mucho que me guste la respuesta de derobert , hace que VIM me dé la siguiente advertencia:

W16: Advertencia: el modo del archivo "test.sh" ha cambiado desde que comenzó la edición

El siguiente código (algo más largo) resuelve ese problema (requiere un 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()
Søren Løvborg
fuente
Ah, probablemente no recibo esa advertencia como he autoreadestablecido.
derobert
Estoy confundido porque eso silencia la advertencia, porque parece hacer exactamente lo mismo: simplemente llamar a un script de Python en lugar de chmod ...
derobert
Sip. Pero por alguna razón, la función Python no activa la detección de cambio de modo. Puede ser una peculiaridad de mi configuración, aunque creo que estoy ejecutando un Vim bastante vainilla en la instalación de Ubuntu.
Søren Løvborg