Having written the script, you can invoke it by sh
scriptname
,
[13]
or alternatively bash scriptname
. (Not
recommended is using sh <scriptname
,
since this effectively disables reading from
stdin
within the script.) Much more convenient is to make
the script itself directly executable with a chmod.
chmod 555 scriptname
(gives
everyone read/execute permission)
[14]
chmod +rx scriptname
(gives
everyone read/execute permission)
chmod
u+rx scriptname
(gives only the
script owner read/execute permission)
Having made the script executable, you may now test it by
./scriptname
.
[15]
If it begins with a “sha-bang” line, invoking the
script calls the correct command interpreter to run it.
As a final step, after testing and debugging,
you would likely want to move it to /usr/local/bin
(as
root, of course), to make the script
available to yourself and all other users as a systemwide
executable. The script could then be invoked by simply typing
scriptname [ENTER] from the
command-line.
[13] Caution: invoking a Bash
script by sh scriptname
turns off
Bash-specific extensions, and the script may therefore fail
to execute.
[14] A script needs read, as well as execute permission for it to run, since the shell needs to be able to read it.
[15] Why not simply invoke the script with
scriptname
? If the directory you
are in ($PWD) is where
scriptname
is located, why doesn't
this work? This fails because, for security reasons, the
current directory (./
)
is not by default included in a user's $PATH. It is therefore necessary to
explicitly invoke the script in the current directory with
a ./scriptname
.