How do I install a script to run anywhere from the

2019-01-21 17:11发布

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?

8条回答
一纸荒年 Trace。
2楼-- · 2019-01-21 17:47

Type echo $PATH in a shell. Those are the directories searched when you type command, so put it in one of those.

Edit: Apparently don't use /usr/bin, use /usr/local/bin

查看更多
干净又极端
3楼-- · 2019-01-21 17:53

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 the unalias command. The line to be added would be:

alias MyScript=/path/to/file/MyScript
查看更多
贪生不怕死
4楼-- · 2019-01-21 17:57

Acording to FHS, the /usr/local/bin/ is the good place for custom scripts. I prefer to make them 755 root:root, after copying them there.

查看更多
女痞
5楼-- · 2019-01-21 17:58

Just create ~/bin and put export 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):

  1. The other way 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.
  2. Don't forget to chmod+x when you save your script in ~/bin.
  3. Be aware of what you are putting in your ~/bin folder, if you are just testing something or working on unfinished script, its always better to use ./$SCRIPT_NAME from your CWD to execute the script than putting it under ~/bin.
查看更多
smile是对你的礼貌
6楼-- · 2019-01-21 17:58

Walkthrough of making a python script available anywhere:

Make a python script:

cd /home/el/bin
touch stuff.py
chmod +x stuff.py

Find out where your python is:

which python
/usr/bin/python

Put this code in there:

#!/usr/bin/python
print "hi"

Run in it the same directory:

python stuff.py

Go up a directory and it's not available:

cd ..
stuff.py

-bash: stuff.py: command not found

Not found! It's as we expect, add the file path of the python file to the $PATH

vi ~/.bashrc

Add the file:

export PATH=$PATH:/home/el/bin

Save it out, re apply the .bashrc, and retry

source ~/.bashrc

Try again:

cd /home/el
stuff.py

Prints:

hi

The trick is that the bash shell knows the language of the file via the shebang.

查看更多
【Aperson】
7楼-- · 2019-01-21 18:04

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:

#!/usr/bin/python
print("Hello Pythonista!")

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:

 $ pwd
 ~/Desktop
 $ cat > myscript.py << EOF
 > #!/usr/bin/python
 > print("Hello Pythonista!")
 > EOF
 $ export PATH="$PATH:$HOME/bin"
 $ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
 $ chmod +x myscript.py
 $ hello
Hello Pythonista!
查看更多
登录 后发表回答