Мне выделили всю папку сценариям Python.
Я устал от выполнения chmod на каждом новом сценарии Python, который я пишу.
Существует ли способ сделать каждый файл в моем исполняемом файле папки, если это - сценарий 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
), я не могу найти событие, в котором создается новый файл, поэтому мне пришлось довольствоваться запуском каждый раз, когда он записывается to. При первом применении chmod
файл изменяется, и vim
сообщит вам об этом:
"test.py" [New] 0L , 0C написано
W16: Предупреждение: режим файла "test.py" изменился с момента начала редактирования
См. ": Help W16" для получения дополнительной информации.
[O] K, (L) файл загрузки:
Я попробовал пару уловок, чтобы заставить его автоматически читать
только для этого изменения, но безуспешно. Поэтому вам придется дважды нажать Enter .
При запуске скрипт ниже автоматически изменяет разрешения для всех файлов заданного типа (расширения) в справочник (один раз). После этого сценарий каждые 5 секунд проверяет каталог на наличие вновь добавленных файлов и изменяет разрешения , если файл имеет заданный тип (в данном случае .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
. Запустите mkscript.sh
из рабочего каталога, в котором хранятся скрипты python. Скрипт создает некоторую полезную информацию заголовка, называет скрипт и делает его исполняемым, а затем открывает выбранный редактор; в вашем случае 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