I figured this out. I just appended the new java path to the beginning of my path variable instead of the end and it worked.
export PATH=/usr/local/testing/jdk1.6.0_23/bin:$PATH
That worked. Now i am going to set in my script so it will do automatically.
You seem to be mistaken in that abc.py
would not be a command. If you can execute it, then is, just one with a dot in the name. Execute in the sense that you can do ./abc.py
, so the execute bits must be set. If you have to do python abc.py
than you it is not a command (yet).
In general, to make a normal python file abc.py
executable you should make sure the first line reads:
#!/usr/bin/env python
(This assumes you have /usr/bin/env
as a program, and that will find the python
command, which might be in /usr/local/bin
. It also assumes that you want to run the default python
(which is normally a link to a particular python version like python2.7
), you could also use python3
if that is available as a command).
After that do
chmod +x abc.py
mv abc.py abc
And then you can run ./abc
. If the current directory is in your path, or if you move abc
to a directory in your path, you should be able to execute abc
from anywhere.¹
There are however disadvantages of renaming and moving the file:
- you can no longer to
from abc import SomeClass
, as the file is renamed
- If the file is under revision control it might no longer be
So instead, what I normally do, is make a new file /usr/local/bin/abc
that looks like:
#!/usr/bin/env python
from abc import main
main()
and have at the bottom of abc.py
:
def main():
doing the real stuff
if __name__ == '__main__':
main()
The directory of abc.py
needs to be in the PATH python searches for modules, but this way it doesn't have to be changed, and can be used by any program as an import, and started as python abc.py
.
¹ The mv
is necessary to get rid of the dot in the command name, but not really necessary, you can invoke ./abc.py
if you don't rename it.
Best Answer
It looks like your environment doesn't include the
/usr/sbin
directory that holds such system programs.The quick fix should be to use
/usr/sbin/adduser
instead of justadduser
.Two alternative solutions are:
Change the
PATH
in.bashrc
and/or.bash_profile
so that/usr/sbin
is included in the list. For example, here is my setting:Edit the
sudoers
configuration (withsudo visudo -f /etc/sudoers.d/securepath
) and add this line to the empty file:Either would be sufficient.