Jak ustawić bit wykonywalny dla konkretnego pliku automatycznie

10

Chcę, aby podczas tworzenia konkretnego pliku, załóżmy, że tworzę go w edytorze vim, utworzony plik powinien również uzyskać uprawnienia do wykonywania, gdy zostanie utworzony. Chcę tego, ponieważ tworzę niektóre pliki Pythona i nie chcę jawnie ustawiać uprawnień do pliku, więc chcę w jakiś sposób, aby bit wykonywalny został ustawiony, gdy tylko utworzę plik z określonym rozszerzeniem lub z konkretnym edytorem.

mandeep
źródło

Odpowiedzi:

11

Dla vima masz do dyspozycji potężne skrypty. Na przykład w moim pliku .vimrc mam:

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

Jeśli chcesz to zrobić tylko według nazwy pliku, zamiast szukać #! linia, możesz zrobić:

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

Ten artykuł na temat Administracji Debiana zawiera także instrukcje dotyczące EMACS.

derobert
źródło
jaki jest wtedy twój autoread?
dustin
@dustin autoread jest ustawiony (true / on / yes) w moim vimrc (AFAIK, jest to po prostu boolean, jest albo włączony albo wyłączony)
derobert
1

Tak jak lubię odpowiedź derobert , powoduje, że VIM wyświetla mi następujące ostrzeżenie:

W16: Ostrzeżenie: Tryb pliku „test.sh” zmienił się od czasu rozpoczęcia edycji

Poniższy (nieco dłuższy) kod rozwiązuje ten problem (wymaga vima z obsługą Pythona):

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
źródło
Ach, prawdopodobnie nie dostaję tego ostrzeżenia, jak już autoreadustawiłem.
derobert
Jestem zdezorientowany, że wycisza to ostrzeżenie, ponieważ wydaje się, że robi dokładnie to samo - po prostu wywołuje skrypt Pythona zamiast chmod ...
derobert
Tak. Ale z jakiegoś powodu funkcja Python nie wyzwala wykrywania zmiany trybu. Może to być dziwactwo mojej konfiguracji, chociaż wydaje mi się, że korzystam z raczej waniliowego Vima na instalacji Ubuntu.
Søren Løvborg