Intereting Posts
Как выполнить цикл через несколько подкаталогов для поиска файлов с помощью bash Как проверить правильность установки tmux на Mac OSX Как я могу прочитать дескриптор «Характеристическое описание пользователя»? Как я могу получить самокомпилированные пакеты, чтобы хорошо играть с менеджерами пакетов (например, apt-get, yum) Загрузите весь сегодняшний стек с помощью wget Что происходит, когда диск смонтирован? Как я могу захватить два столбца вывода ls в сценарии bash Расширяется ли расширение истории в сценариях? Укажите идентификационный файл (id_rsa) с помощью rsync Являются ли / dev / {udp, tcp} стандартизованными или доступными повсюду? как «несколько узлов файлов» могут быть связаны с одним индексом? мой Linux не может видеть устройство srix card atrix 4g Имеет ли исходный сценарий bash неправильные значения для $ BASH_SOURCE? Каков наилучший способ определить рабочий каталог для процесса UNIX с помощью «ps»? Как установить Clonezilla для клонирования только раздела

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

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

Для 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 , это заставляет 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()