Comment définir automatiquement le bit exécutable pour un fichier particulier

10

Je veux que lorsque je crée un fichier particulier, supposons que je le crée dans l'éditeur vim, le fichier créé devrait également obtenir l'autorisation exécutable lors de sa création. Je veux cela car je crée des fichiers python et je ne veux pas définir explicitement les autorisations pour le fichier, je veux donc un moyen pour que le bit exécutable soit défini dès que je crée un fichier avec une extension particulière ou avec un éditeur particulier.

mandé
la source

Réponses:

11

Pour vim, vous disposez de puissants scripts. Par exemple, dans mon .vimrc, j'ai:

" 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 vous voulez le faire uniquement par nom de fichier, au lieu de rechercher le #! ligne, vous pourriez faire:

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

Cet article sur l'administration Debian contient également des instructions pour EMACS.

derobert
la source
À quoi votre lecture automatique est-elle alors réglée?
dustin
@dustin autoread est défini (true / on / yes) dans mon vimrc (AFAIK, c'est juste un booléen, c'est on ou off)
derobert
1

Autant j'aime la réponse de derobert , cela fait que VIM me donne l'avertissement suivant:

W16: Avertissement: le mode du fichier "test.sh" a changé depuis le début de l'édition

Le code suivant (un peu plus long) résout ce problème (nécessite un vim compatible 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
la source
Ah, je n'ai probablement pas cet avertissement comme je l'ai autoreaddéfini.
derobert
Je suis confus qui fait taire l'avertissement, car il semble faire exactement la même chose - simplement appeler un script python au lieu de chmod ...
derobert
Ouaip. Mais pour une raison quelconque, la fonction Python ne déclenche pas la détection de changement de mode. Cela pourrait être une bizarrerie de ma configuration, bien que je pense que je lance un Vim plutôt vanille sur l'installation d'Ubuntu.
Søren Løvborg