可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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?
回答1:
The best place to put things like this is /usr/local/bin
.
This is the normal place to put custom installed binaries, and should be early in your PATH
.
Simply copy the script there (probably using sudo
), and it should work for any user.
回答2:
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):
- 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.
- Don't forget to
chmod+x
when you save your script in ~/bin
.
- 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
.
回答3:
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.
回答4:
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!
回答5:
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
回答6:
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
回答7:
Just create symbolic link to your script in /usr/local/bin/:
sudo ln -s /path/to/your/script.py /usr/local/bin/script
回答8:
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.