Во-первых, ИМХО, система разрешений существует для вашей защиты, и лучше всего научиться любить. Если, однако, вы действительно хотите победить, вот как. Откройте какой-нибудь терминал и выполните команду:
inotifywait -m "$HOME/bin" -e close_write -e moved_to --format '%w%f' | while read -r fname; do chmod +x "$fname"; done
Или для тех, кто предпочитает, чтобы их команды распределялись по нескольким строкам:
inotifywait -m "$HOME/bin" -e close_write -e moved_to --format '%w%f' |
while read -r fname
do
chmod +x "$fname"
done
Эта команда добавит разрешение на выполнение для каждого файла, созданного или перемещенного в каталог $HOME/bin
(или любой другой каталог, который вы выберете).
Если в вашей системе еще не установлен inotifywait
, вам может потребоваться установить его с помощью команды:
apt-get install inotify-tools
Как это устроено
inotifywait -m "$HOME/bin" -e close_write -e moved_to --format '%w%f'
Эта команда просматривает каталог $HOME/bin
. Каждый раз, когда файл перемещается в этот каталог (moved_to
) или записывается и закрывается в этом каталоге (close_write
), команда записывает путь и имя файла в стандартный вывод.
(Недостатком здесь является то, что inotifywait
не поддерживает разделенный NUL вывод. Следовательно, этот скрипт не будет работать, если имя вашего файла содержит символы новой строки.)
|
Это приводит к запуску конвейера , который отправляет стандартный вывод inotifywait
на стандартный вывод следующей команды.
while read -r fname; do
Это запускает цикл, который читает строки из stdin и присваивает их переменной fname
.
chmod +x "$fname"
Это добавляет бит выполнения в файл $fname
. Если вы хотите, чтобы другие пользователи в вашей системе могли запускать команды, вы можете изменить это на chmod a+x "$fname"
. Или вы можете изменить это на chmod 755 "$fname"
если вы действительно этого хотите.
done
Это сигнализирует об окончании цикла.