Creating executable files in Linux Creating executable files in Linux linux linux

Creating executable files in Linux


Make file executable:

chmod +x file

Find location of perl:

which perl

This should return something like

/bin/perl sometimes /usr/local/bin

Then in the first line of your script add:

#!"path"/perl with path from above e.g.

#!/bin/perl

Then you can execute the file

./file

There may be some issues with the PATH, so you may want to change that as well ...


No need to hack your editor, or switch editors.

Instead we can come up with a script to watch your development directories and chmod files as they're created. This is what I've done in the attached bash script. You probably want to read through the comments and edit the 'config' section as fits your needs, then I would suggest putting it in your $HOME/bin/ directory and adding its execution to your $HOME/.login or similar file. Or you can just run it from the terminal.

This script does require inotifywait, which comes in the inotify-tools package on Ubuntu,

sudo apt-get install inotify-tools

Suggestions/edits/improvements are welcome.

#!/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 watchSUBDIRS="TRUE"                 # watch subdirectories tooNOTIFY_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 myselfSCRIPT="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=""fiwhile 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'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_FILEdone


What you describe is the correct way to handle this.

You said that you want to stay in the GUI. You can usually set the execute bit through the file properties menu. You could also learn how to create a custom action for the context menu to do this for you if you're so inclined. This depends on your desktop environment of course.

If you use a more advanced editor, you can script the action to happen when the file is saved. For example (I'm only really familiar with vim), you could add this to your .vimrc to make any new file that starts with "#!/*/bin/*" executable.

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