pythonスクリプト専用のフォルダー全体があります。
私が書くすべての新しいpythonスクリプトでchmodを行うのはうんざりです。
pythonスクリプトの場合、フォルダー内のすべてのファイルを実行可能にする方法はありますか?
新しい.pyスクリプトが作成されるたびにチェックし、新しい.pyスクリプトがある場合はその場で実行可能にするスクリプトがあると便利です。
別の良いオプションは Incron です。特定の場所の指定可能な条件でinotifyで動作します。
ですから、このフォルダーを監視し、作成されたファイルを確認したら、コマンドを実行します。
サンプルのincrontabと同じように...
/path/to/scripts IN_CREATE chmod +x $@$# # <--- this arcane bit is path ($@) + file ($#)
パス/ファイルをbashスクリプトへの引数として同様に使用して、必要に応じて.py
拡張子でフィルタリングできるようにすることができます。
chmod +x /path/to/python/scripts/dir/*.py
ディレクトリのすべての現在の.py
ファイルを実行可能にします/ path/to/python/scripts/dir。
あなたが説明しているように、私は自動ツールを知りません。これを行うことができるマクロをエディターに持つことは可能かもしれませんが、私が使用しているエディターではできません。 ;-)
最初のステップとして、~/.vimrc
でこれを試すことができます:
autocmd BufWritePost *.py silent execute "! chmod +x %"
chmod +x
ファイルに書き込むときに、ファイル名に対して.py
が実行されます。イベントのリスト(:h events
)を見ると、newファイルが作成されているイベントが見つからないため、書き込みのたびに実行する必要がありました。初めてchmod
が適用されると、ファイルが変更され、vim
がそれを警告します。
"test.py" [New] 0L, 0C written
W16: Warning: Mode of file "test.py" has changed since editing started
See ":help W16" for more info.
[O]K, (L)oad File:
この変更のためだけにautoread
にするためにいくつかのトリックを試しましたが、運はありませんでした。を押す必要があります Enter 二回。
開始されると、以下のスクリプトは、ディレクトリ内の特定のタイプ(拡張子)のすべてのファイルの許可を自動的に変更します(1回)。その後、スクリプトは新しく追加されたファイルについて5秒ごとにディレクトリをチェックし、パーミッションを変更しますifファイルは指定されたタイプ(この場合は.py
ファイル)
いくつかのオプションがあります。この場合、新しく追加されたファイルを実行可能にしますが、行[command = "chmod +x"
]で定義されている他のアクションも可能です。さらに、アクションを実行するファイル(言語拡張)の種類を定義(変更)できます。
以下のスクリプトを空のファイルにコピーします。 change_permission.py
として保存し、次のコマンドでバックグラウンドで実行します。
python3 <script> <folder_to_watch>
#!/usr/bin/env python3
import subprocess
import time
import sys
directory = sys.argv[1]
command = "chmod +x"; check_interval = 5; extensions = (".py")
def current_files():
read = subprocess.check_output(["ls", directory]).decode("utf-8").strip()
return [item for item in read.split("\n") if item[item.rfind("."):] in extensions]
initial_files = current_files()
for file in initial_files:
subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])
while True:
update = current_files()
for file in update:
if not file in initial_files:
subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])
initial_files = update
time.sleep(check_interval)
*注意:Sudo権限が必要な場合は、Sudo
を指定してスクリプトを実行するだけです
役立つかもしれないいくつかのコマンドを含むいくつかの情報があります。チェックアウト http://ss64.com/bash/syntax-permissions.html
find . -type f -print0 | xargs -0 chmod 775 # change all file permissions in current directory
find . -type d -print0 | xargs -0 chmod 755 # change directory permissions
次のヘッダースクリプトを使用できます。 mkscript.sh
に$PATH
を配置します。 pythonスクリプトが保存されている作業ディレクトリからmkscript.sh
を実行します。スクリプトは、いくつかの有用なヘッダー情報を作成し、スクリプトにタイトルを付けて実行可能にし、選択したエディターを開きます。あなたの場合、VIM。
mkscript.sh
を変更しました。python拡張子を持つスクリプトを生成します*.py
変数${PYTHON_VERSION}
が呼び出されるため、PYTHON_VERSION="/usr/bin/python --version"
が/etc/environment
ファイルに追加されました。 https://help.ubuntu.com/community/EnvironmentVariables をご覧ください
#!/bin/bash -
#title :mkscript.sh
#description :This script will make a header for a PYTHON script.
#author :bgw
#date :20111101
#version :0.4
#usage :bash mkscript.sh
#notes :Install Vim and Emacs to use this script.
#bash_version :4.1.5(1)-release
#==============================================================================
today=$(date +%Y%m%d)
div=======================================
/usr/bin/clear
_select_title(){
# Get the user input.
printf "Enter a title: " ; read -r title
# Remove the spaces from the title if necessary.
title=${title// /_}
# Convert uppercase to lowercase.
title=${title,,}
# Add .sh to the end of the title if it is not there already.
[ "${title: -3}" != '.py' ] && title=${title}.py
# Check to see if the file exists already.
if [ -e $title ] ; then
printf "\n%s\n%s\n\n" "The script \"$title\" already exists." \
"Please select another title."
_select_title
fi
}
_select_title
printf "Enter a description: " ; read -r dscrpt
printf "Enter your name: " ; read -r name
printf "Enter the version number: " ; read -r vnum
# Format the output and write it to a file.
printf "%-16s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%s\n\n\n" '#!/usr/bin/python -' '#title' ":$title" '#description' \
":${dscrpt}" '#author' ":$name" '#date' ":$today" '#version' \
":$vnum" '#usage' ":./$title" '#notes' ':' '#python_version' \
":${PYTHON_VERSION}" \#$div${div} > $title
# Make the file executable.
chmod +x $title
/usr/bin/clear
_select_editor(){
# Select between Vim or Emacs.
printf "%s\n%s\n%s\n\n" "Select an editor." "1 for Vim." "2 for Emacs."
read -r editor
# Open the file with the cursor on the twelth line.
case $editor in
1) vim +12 $title
;;
2) emacs +12 $title &
;;
*) /usr/bin/clear
printf "%s\n%s\n\n" "I did not understand your selection." \
"Press <Ctrl-c> to quit."
_select_editor
;;
esac
}
_select_editor