Cara mengatur bit yang dapat dieksekusi untuk file tertentu secara otomatis

10

Saya ingin bahwa ketika saya membuat membuat file tertentu, misalkan saya membuatnya dalam editor vim, file yang dibuat harus mendapatkan izin yang dapat dieksekusi juga ketika akan dibuat. Saya ingin ini karena saya membuat beberapa file python dan tidak ingin secara eksplisit mengatur izin untuk file jadi saya ingin beberapa cara sehingga bit executable diatur segera setelah saya membuat file dengan ekstensi tertentu atau dengan editor tertentu.

Mandeep
sumber

Jawaban:

11

Untuk vim, Anda memiliki skrip yang kuat tersedia. Misalnya, di .vimrc saya, saya punya:

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

Jika Anda ingin melakukannya dengan nama file saja, daripada mencari #! line, Anda bisa melakukan:

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

Itu artikel tentang Debian Administrasi memiliki instruksi untuk Emacs juga.

derobert
sumber
apa yang diatur autoread Anda saat itu?
dustin
@dustin autoread disetel (true / on / yes) di vimrc saya (AFAIK, ini hanya boolean, baik yang aktif atau nonaktif)
derobert
1

Sama seperti saya suka jawaban derobert , itu menyebabkan VIM memberi saya peringatan berikut:

W16: Peringatan: Mode file "test.sh" telah berubah sejak pengeditan dimulai

Kode berikut (agak lebih lama) memecahkan masalah itu (memerlukan vim yang diaktifkan dengan 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
sumber
Ah, saya mungkin tidak mendapatkan peringatan itu seperti yang saya autoreadtetapkan.
derobert
Saya bingung yang membungkam peringatan, karena tampaknya melakukan hal yang persis sama — hanya memanggil skrip python alih-alih chmod ...
derobert
Ya. Tetapi untuk beberapa alasan, fungsi Python tidak memicu deteksi perubahan mode. Mungkin merupakan kekhasan dari pengaturan saya, meskipun saya percaya saya menjalankan Vim agak vanilla di Ubuntu menginstal.
Søren Løvborg