Подтвердить что ты не робот

Создание исполняемых файлов в Linux

Одна вещь, которую я планирую делать, - писать (мучительно простые) скрипты Perl, и я хотел бы иметь возможность запускать их без явного вызова Perl из терминала. Я признателен, что для этого мне нужно предоставить им разрешения на выполнение. Делать это с помощью chmod достаточно просто, но это также похоже на немного кропотливый дополнительный шаг. Я бы хотел, чтобы это одна из двух вещей:

Во-первых, есть ли способ установить флаг выполнения при сохранении файла? В настоящее время я экспериментирую с gedit и geany, но был бы готов переключиться на аналогичный (или лучше) признанный редактор, если бы у него была эта возможность.

В противном случае существует ли способ объявить, что все файлы, созданные в определенном каталоге, должны иметь разрешения на выполнение?

У меня umask установлено значение 022, что, насколько мне известно, должно быть ОК, но, похоже, файлы создаются как текстовые файлы (с 666 разрешениями по умолчанию), а не исполняемые файлы (с разрешениями 777 по умолчанию).

Возможно, я просто ленив, но я считаю, что должен быть более удобный способ, чем chmodding каждый созданный script.

4b9b3361

Ответ 1

Сделать исполняемый файл:

chmod + x file

Найти местоположение perl:

который perl

Это должно вернуть что-то вроде

/bin/perl иногда /usr/local/bin

Затем в первой строке вашего script добавьте:

#! "path" /perl, путь сверху.

#!/Bin/Perl

Затем вы можете выполнить файл

./файл

В PATH могут возникнуть некоторые проблемы, поэтому вы можете также изменить это...

Ответ 2

Не нужно взломать редактор или переключить редакторы.

Вместо этого мы можем придумать script для просмотра ваших каталогов разработки и файлов chmod по мере их создания. Это то, что я сделал в прилагаемом bash script. Вероятно, вы захотите прочитать комментарии и отредактировать раздел "config" в соответствии с вашими потребностями, тогда я бы предложил поместить его в ваш каталог $HOME/bin/и добавить его выполнение в ваш файл $HOME/.login или аналогичный файл. Или вы можете просто запустить его с терминала.

Для этого script требуется inotifywait, который входит в пакет inotify-tools на Ubuntu,

sudo apt-get install inotify-tools

Предложения/изменения/улучшения приветствуются.

#!/usr/bin/env bash

# --- usage --- #
# Depends: 'inotifywait' available in inotify-tools on Ubuntu
# 
# Edit the 'config' section below to reflect your working directory, WORK_DIR,
# and your watched directories, WATCH_DIR. Each directory in WATCH_DIR will
# be logged by inotify and this script will 'chmod +x' any new files created
# therein. If SUBDIRS is 'TRUE' this script will watch WATCH_DIRS recursively.
# I recommend adding this script to your $HOME/.login or similar to have it
# run whenever you log into a shell, eg 'echo "watchdirs.sh &" >> ~/.login'.
# This script will only allow one instance of itself to run at a time.

# --- config --- #

WORK_DIR="$HOME/path/to/devel" # top working directory (for cleanliness?)
WATCH_DIRS=" \
    $WORK_DIR/dirA \
    $WORK_DIR/dirC \
    "                          # list of directories to watch
SUBDIRS="TRUE"                 # watch subdirectories too
NOTIFY_ARGS="-e create -q"     # watch for create events, non-verbose


# --- script starts here --- #
# probably don't need to edit beyond this point

# kill all previous instances of myself
SCRIPT="bash.*`basename $0`"
MATCHES=`ps ax | egrep $SCRIPT | grep -v grep | awk '{print $1}' | grep -v $$`
kill $MATCHES >& /dev/null

# set recursive notifications (for subdirectories)
if [ "$SUBDIRS" = "TRUE" ] ; then
    RECURSE="-r"
else
    RECURSE=""
fi

while true ; do
    # grab an event
    EVENT=`inotifywait $RECURSE $NOTIFY_ARGS $WATCH_DIRS`

    # parse the event into DIR, TAGS, FILE
    OLDIFS=$IFS ; IFS=" " ; set -- $EVENT
    E_DIR=$1
    E_TAGS=$2
    E_FILE=$3
    IFS=$OLDIFS

    # skip if it not a file event or already executable (unlikely)
    if [ ! -f "$E_DIR$E_FILE" ] || [ -x "$E_DIR$E_FILE" ] ; then
        continue
    fi

    # set file executable
    chmod +x $E_DIR$E_FILE
done

Ответ 3

То, что вы описываете, - это правильный способ справиться с этим.

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

Если вы используете более продвинутый редактор, вы можете script выполнить действие, когда файл будет сохранен. Например (я действительно знаком с vim), вы можете добавить это в свой .vimrc, чтобы создать любой новый файл, начинающийся с исполняемого файла #!/*/bin/*.

au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif

Ответ 4

Это действительно не такая большая сделка. Вы можете просто сделать script с помощью одной команды:

chmod a+x *.pl

И запустите script после создания файла perl. Кроме того, вы можете открыть файл с помощью следующей команды:

touch filename.pl && chmod a+x filename.pl && vi filename.pl # choose your favorite editor

Ответ 5

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что, даже если вы можете установить свои собственные значения umask в системе, это не позволяет вам явно управлять разрешениями по умолчанию, установленными в новом файле gedit (или любым другим редактором вы используете).

Я считаю, что эта деталь жестко закодирована в gedit и большинство других редакторов. Ваши варианты его изменения: (a) взломать собственный мод gedit или (b) найти текстовый редактор, который позволяет вам устанавливать предпочтения по умолчанию для новых файлов. (Извините, я ничего не знаю.)

В свете этого, это действительно не так уж плохо, чтобы chmod ваши файлы, правильно?