How to execute python script from console without writing full path?

8

3

I have a few python scripts on /usr/share/scripts/ that I use often, and I want to be able to execute them by just writing the name and not the full path, how could I do this?

echo $PATH shows me:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/real/RealPlayer

So I tried writing on the terminal:

PATH="/usr/share/scripts/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/real/RealPlayer"
export

No errors shown and echo $PATH now shows my new scripts path, but when I run scriptName I get command not found.

What am i doing wrong?

grerdas

Posted 2011-05-12T12:01:01.840

Reputation: 81

How did you do it right before? – Ignacio Vazquez-Abrams – 2011-05-12T12:06:30.197

I didn't do it before. – grerdas – 2011-05-12T12:08:32.377

You didn't run them? I thought you said you used them often... – Ignacio Vazquez-Abrams – 2011-05-12T12:11:13.357

@Ignacio Vazquez-Abrams : Oh I didn't understand your question sorry, I ran them like "/usr/share/scripts/scriptName.py args" – grerdas – 2011-05-12T12:12:36.397

Answers

9

Set executable permissions for python scripts by "chmod +x *"
Now you have two options:

  • Add your scripts directory to PATH env variable, or
  • Make symbolic links to your scripts one by one (or write another script to do the same) in /usr/local/bin directory.

Example:
[mzed@node02 test]$ vim printme.py

Contents of file:

#!/usr/bin/python
print "This is cool!"

-

[mzed@node02 test]$ mv printme.py printme
[mzed@node02 test]$ chmod +x printme
[mzed@node02 ~]$ cd /usr/local/bin/
[mzed@node02 bin]$ sudo ln -s ~/test/printme .
[mzed@node02 bin]$ ls
deskzilla  grails  grails-debug  printme  startGrails
[mzed@node02 bin]$ cd
[mzed@node02 ~]$ printme 
This is cool!
[mzed@node02 ~]$

I hope this will help you.

mj.scintilla

Posted 2011-05-12T12:01:01.840

Reputation: 306

Any possibility to make a version for Windows? (I know this is a Linux question) – Iulian Onofrei – 2015-03-20T20:02:06.670

1

Okay, maybe I'm just older school...
In /usr/bin add shell scripts with the #!/bin/bash header and no .sh extension. Then in those scripts just run python absolutepath.

Why I think it's better than the other answers:
Doesn't require chmod-ing your scripts to make them executable.
Doesn't require renaming your scripts.

RobotHumans

Posted 2011-05-12T12:01:01.840

Reputation: 5 758

Don't forget the args. – juanitogan – 2016-01-13T06:02:34.833

0

Sorry for suggesting a basic thing.. Did you try "scriptname.py", instead of just "scriptname"?

Also, all the scripts need to have execute permissions (you can do that by issuing "chmod +x script.py").. Judging from your comment above, since you have run them like "/usr/share/scripts/scriptName.py args", they should have execute permissions.

Vinay

Posted 2011-05-12T12:01:01.840

Reputation: 110