Как автоматически установить исполняемый бит для определенного файла

10

Я хочу, чтобы при создании конкретного файла, предположим, что я создаю его в редакторе vim, созданный файл должен получить разрешение на выполнение при его создании. Я хочу этого, так как я создаю некоторые файлы Python и не хочу явно устанавливать разрешения для файла, поэтому я хочу, чтобы какой-то способ устанавливал исполняемый бит, как только я создаю файл с определенным расширением или с определенным редактором.

Мандип
источник

Ответы:

11

Для vim у вас есть мощные скрипты. Например, в моем .vimrc у меня есть:

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

Если вы хотите сделать это только по имени файла, а не искать #! линия, вы могли бы сделать:

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

В этой статье по администрированию Debian также есть инструкции для EMACS.

derobert
источник
какое у вас настроено автоматическое чтение?
Дастин
@dustin autoread установлен (true / on / yes) в моем vimrc (AFAIK, он просто логический,
включен
1

Как бы мне ни понравился ответ Дероберта , это заставляет VIM дать мне следующее предупреждение:

W16: Предупреждение: режим файла "test.sh" изменился с момента начала редактирования

Следующий (несколько более длинный) код решает эту проблему (требуется vim с поддержкой 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()
Сёрен Лёвборг
источник
Ах, я, вероятно, не получаю это предупреждение, как я autoreadустановил.
Дероберт
Я запутался, что это заставляет замолчать предупреждение, потому что кажется, что он делает то же самое - просто вызывает скрипт на python вместо chmod ...
derobert
Ага. Но по какой-то причине функция Python не запускает обнаружение смены режима. Может быть, это извращение моей установки, хотя я полагаю, что я использую довольно ванильный Vim при установке Ubuntu.
Сёрен Лёвборг