如何安装脚本以从命令行的任何位置运行?

如果我有一个基本的Python脚本,它的hashbang和什么不到位,所以从Linuxterminal上我可以运行

/path/to/file/MyScript [args] 

而不通过解释器或任何文件扩展名执行,它将执行该程序。

所以我会安装这个脚本,以便我可以input简单

 MyScript [args] 

系统中的任何地方,它会运行? 这可以为系统上的所有用户执行,还是必须为每个用户重做? 我只是把脚本放在一个特定的目录中,还是其他的东西是必要的?

把这样的东西放在最好的地方是/usr/local/bin

这是放置自定义安装的二进制文件的正常位置,应该早于PATH

只需复制脚本(可能使用sudo ),它应该适用于任何用户。

只需创建~/bin ,并将export PATH=$PATH:$HOME/bin放入您的bashrc /配置文件中。 不要惹这个系统,它咬你,相信我。

更少的事情(与问题有关,但不是答案的一部分):

  1. 另一种方式export PATH=$HOME/bin:$PATH是不安全的,因为bash将会查看你的~/bin文件夹中的可执行文件,如果它们的名字与原始$PATH其他可执行文件相匹配,你将会意外地/非工作命令执行。
  2. 将脚本保存在~/bin时,请不要忘记chmod+x
  3. 注意你在~/bin文件夹中的内容,如果你只是测试一些东西或者在未完成的脚本上工作,那么最好使用CWD ./$SCRIPT_NAME来执行这个脚本,而不是放在~/bin

在任何地方使用python脚本的演练:

制作一个python脚本:

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

找出你的python在哪里:

 which python /usr/bin/python 

把这个代码放在那里:

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

在其中运行相同的目录:

 python stuff.py 

上一个目录,它不可用:

 cd .. stuff.py -bash: stuff.py: command not found 

未找到! 正如我们所期望的那样,将python文件的文件路径添加到$ PATH中

 vi ~/.bashrc 

添加文件:

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

保存它,重新应用.bashrc,然后重试

 source ~/.bashrc 

再试一次:

 cd /home/el stuff.py 

打印:

 hi 

诀窍是bash shell通过shebang知道文件的语言。

快速的答案是将脚本symlink到您的系统$PATH包含的任何目录。

漫长的回答在下面通过一个例子来说明(这是我通常所做的):

a)创建脚本,例如$HOME/Desktop/myscript.py

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

b)更改脚本文件的权限以使其可执行:

$ chmod +x myscript.py

c)在$PATH添加一个自定义目录(请参阅下面的注释中的原因),以便将其用于用户的脚本:

$ export PATH="$PATH:$HOME/bin"

d)创建脚本的符号链接如下:

$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello

请注意, hello (可以是任何东西)是用来调用脚本的命令的名称。

注意:

i)使用$HOME/bin而不是/usr/local/bin是将本地脚本与其他用户(如果你愿意的话)以及其他安装的东西分开。

ii)要创建一个符号链接,您应该使用完整的正确路径,即

$HOME/bin GOOD〜 ~/bin不好!

这是一个完整的例子:

  $ 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! 

在shell中输入echo $PATH 。 这些是你键入command时搜索的目录,所以把它放在其中的一个。

编辑:显然不要使用/usr/bin ,使用/usr/local/bin

将脚本放在PATH的某处(如/usr/local/bin )是一个很好的解决方案,但是这会迫使系统的所有用户使用/查看脚本。

/etc/profile添加一个别名可以让你的系统用户使用unalias命令来取消这个unalias 。 要添加的行将是:

 alias MyScript=/path/to/file/MyScript 

只需在/ usr / local / bin /中创建脚本的符号链接:

 sudo ln -s /path/to/your/script.py /usr/local/bin/script 

根据FHS , /usr/local/bin/是定制脚本的好地方。 我更喜欢把它们复制到755 root:root