特定のファイルの実行可能ビットを自動的に設定する方法


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 に関する説明もあります。


あなたの自動読込はそれから何に設定されていますか?
ダスティン2013年

@dustin autoreadが私のvimrcで設定されています(true / on / yes)(AFAIK、単なるブール値、そのオンまたはオフ)
derobert

1

derobertの回答が好きなだけで、VIMから次の警告が出ます。

W16:警告:ファイル「test.sh」のモードが編集の開始後に変更されました

次の(やや長い)コードはその問題を解決します(Python対応のvimが必要です)。

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設定したのでおそらく私はその警告を受けません。
derobert

無音警報、同じこと-だけではなく、chmodコマンドのPythonスクリプトを呼び出しを行うように見えるので...という私を混同してる
derobert

うん。しかし、何らかの理由で、Python関数はモード変更の検出をトリガーしません。UbuntuのインストールでかなりバニラのVimを実行していると思いますが、私のセットアップの癖かもしれません。
セーレンLøvborg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.