Création de fichiers exécutables sous Linux

une chose que je prévois de faire est d'écrire (douloureusement simple) des scripts Perl, et j'aimerais pouvoir les exécuter sans explicitement appeler Perl depuis le terminal. J'apprécie que, pour faire ça, j'ai besoin de leur accorder des permissions d'exécution. Faire cela avec chmod est assez facile, mais il semble aussi comme une étape supplémentaire légèrement laborieuse. Ce que j'aimerais, c'est l'une de deux choses:

tout d'abord, y a-t-il un moyen de mettre le Drapeau execute lors de la sauvegarde d'un fichier? Actuellement, je suis en train d'expérimenter avec gedit et geany, mais seraient prêts à passer à un éditeur similaire - (ou mieux -) s'il avait cette capacité.

A défaut, y a-t-il un moyen de déclarer que tous les fichiers créés dans un répertoire particulier devraient avoir des permissions d'exécution?

Mon umask est fixé à 022, qui devrait être OK, comme je le comprends, mais il semblerait que les fichiers sont créés en tant que fichiers texte (avec 666 autorisations par défaut) plutôt que des fichiers exécutables (avec 777 par défaut autorisation.)

peut-être que je suis juste paresseux, mais je me suis dit qu'il doit y avoir un moyen plus pratique que chmodding chaque script créé.

39
demandé sur Tshepang 2009-05-03 17:28:07

5 réponses

créer un fichier exécutable:

chmod +x fichier

Trouver l'emplacement de perl:

quel perl

il doit retourner quelque chose comme

/bin/perl parfois /usr/local/bin

Puis dans la première ligne de votre script, ajouter:

#!"chemin d'accès"/perl avec chemin d'accès à partir de ci-dessus par exemple,

#!/ bin / perl

alors vous pouvez exécutez le fichier

.fichier/

il peut y avoir quelques problèmes avec le chemin, donc vous pouvez vouloir changer cela aussi ...

83
répondu 2009-05-03 13:48:29

pas besoin de pirater votre éditeur, ou de changer d'éditeur.

au lieu de cela, nous pouvons trouver un script pour regarder vos répertoires de développement et vos fichiers chmod au fur et à mesure qu'ils sont créés. C'est ce que j'ai fait dans le script bash. Vous voulez probablement lire les commentaires et éditer la section' config ' en fonction de vos besoins, Alors je vous suggérerais de la mettre dans votre répertoire $HOME/bin/ et d'ajouter son exécution à votre $HOME/.connexion ou d'un fichier similaire. Ou vous pouvez simplement l'exécuter de la terminal.

ce script ne nécessite pas inotifywait, qui vient dans le paquet inotify-tools sur Ubuntu,

sudo apt-get install inotify-tools

les Suggestions/modifications/améliorations sont les bienvenues.

#!/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 `"
MATCHES=`ps ax | egrep $SCRIPT | grep -v grep | awk '{print }' | 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=
    E_TAGS=
    E_FILE=
    IFS=$OLDIFS

    # skip if it's 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
6
répondu Dylan 2009-05-04 05:40:07

Ce que vous décrivez est la bonne façon de gérer cela.

Vous avez dit que vous voulez rester dans l'interface graphique. Vous pouvez généralement définir le bit d'exécution par le menu Propriétés du fichier. Vous pouvez également apprendre à créer une action personnalisée pour le menu contextuel de le faire pour vous si vous êtes si incliné. Cela dépend de votre environnement de bureau bien sûr.

si vous utilisez un éditeur plus avancé, vous pouvez script l'action se produire lorsque le fichier est sauvegardé. Par exemple (je suis seulement vraiment familier avec vim), vous pourriez ajouter cela à votre .vimrc pour faire un nouveau fichier qui commence par "#!/*/bin/*" fichier exécutable.

au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif
3
répondu JimB 2009-05-03 17:39:50

C'est vraiment pas que les grandes d'un accord. Vous pourriez juste faire un script avec la commande unique:

chmod a+x *.pl

et exécutez le script après avoir créé un fichier perl. Vous pouvez également ouvrir un fichier avec une commande comme ceci:

touch filename.pl && chmod a+x filename.pl && vi filename.pl # choose your favorite editor
2
répondu BobbyShaftoe 2009-05-03 13:34:21

je pense que le problème que vous rencontrez est que, même si vous pouvez définir vos propres valeurs umask dans le système, cela ne vous permet pas de contrôler explicitement les permissions par défaut définies sur un nouveau fichier par gedit (ou quel que soit l'éditeur que vous utilisez).

je crois que ce détail est codé en dur dans gedit et la plupart des autres éditeurs. Vos options pour le modifier sont (a) l'empaquetage de votre propre mod de gedit ou (b) la recherche d'un éditeur de texte qui vous permet de définir une préférence pour les permissions par défaut sur de nouveaux fichiers. (Désolé, je ne connais aucun.)

Dans ce contexte, il n'est vraiment pas si mal d'avoir chmod vos fichiers, droite?

0
répondu grossvogel 2009-05-03 17:43:57