If I have a basic Python script, with it's hashbang and what-not in place, so that from the terminal on Linux I can run
/path/to/file/MyScript [args]
without executing through the interpreter or any file extensions, and it will execute the program.
So would I install this script so that I can type simply
MyScript [args]
anywhere in the system and it will run? Can this be implemented for all users on the system, or must it be redone for each one? Do I simply place the script in a specific directory, or are other things necessary?
Type
echo $PATH
in a shell. Those are the directories searched when you typecommand
, so put it in one of those.Edit: Apparently don't use
/usr/bin
, use/usr/local/bin
Putting the script somewhere in the PATH (like
/usr/local/bin
) is a good solution, but this forces all the users of your system to use/see your script.Adding an alias in
/etc/profile
could be a way to do what you want allowing the users of your system to undo this using theunalias
command. The line to be added would be:Acording to FHS, the
/usr/local/bin/
is the good place for custom scripts. I prefer to make them755
root:root
, after copying them there.Just create
~/bin
and putexport PATH=$PATH:$HOME/bin
in your bashrc/profile. Don't mess with the system, it will bite you back, trust me.Few more things (relevant to the question but not part of the answer):
export PATH=$HOME/bin:$PATH
is NOT safe, for bash will will look into your~/bin
folder for executables, and if their name matches with other executables in your original$PATH
you will be surprised by unexpected/non working command execution.chmod+x
when you save your script in~/bin
.~/bin
folder, if you are just testing something or working on unfinished script, its always better to use ./$SCRIPT_NAME from yourCWD
to execute the script than putting it under~/bin
.Walkthrough of making a python script available anywhere:
Make a python script:
Find out where your python is:
Put this code in there:
Run in it the same directory:
Go up a directory and it's not available:
Not found! It's as we expect, add the file path of the python file to the $PATH
Add the file:
Save it out, re apply the .bashrc, and retry
Try again:
Prints:
The trick is that the bash shell knows the language of the file via the shebang.
The quick answer is to
symlink
your script to any directory included in your system$PATH
.The long answer is described below with a walk through example, (this is what I normally do):
a) Create the script e.g.
$HOME/Desktop/myscript.py
:b) Change the permission of the script file to make it executable:
$ chmod +x myscript.py
c) Add a customized directory to the
$PATH
(see why in the notes below) to use it for the user's scripts:$ export PATH="$PATH:$HOME/bin"
d) Create a symbolic link to the script as follows:
$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
Notice that
hello
(can be anything) is the name of the command that you will use to invoke your script.Note:
i) The reason to use
$HOME/bin
instead of the/usr/local/bin
is to separate the local scripts from those of other users (if you wish to) and other installed stuff.ii) To create a symlink you should use the complete correct path, i.e.
$HOME/bin
GOOD~/bin
NO GOOD!Here is a complete example: