#! /usr/bin/env在脚本中的作用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iamzhangzhuping/article/details/50425754

#!/usr/bin/env 
在linux的一些bash的脚本,需在开头一行指定脚本的解释程序,如: 
#!/usr/bin/env python 
再如: 
#!/usr/bin/env perl 
#!/usr/bin/env zimbu 
#!/usr/bin/env ruby 
但有时候也用 
#!/usr/bin/python 
和 
#!/usr/bin/perl 
那么 env到底有什么用?何时用这个呢? 

脚本用env启动的原因,是因为脚本解释器在linux中可能被安装于不同的目录,env可以在系统的PATH目录中查找。同时,env还规定一些系统环境量。 而如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题。有时候我们执行一些脚本时就碰到这种情况。

这种写法主要是为了让你的程序在不同的系统上都能适用。 不管你的perl是在/usr/bin/perl还是/usr/local/bin/perl,#!/usr/bin/env perl会自动的在你的用户PATH变量中所定义的目录中寻找perl来执行的。 

Probably the most common use of env is to find the correct interpreter for a script, when the interpreter may be in different directories on different systems.  The following example will find the `perl' interpreter by searching through the directories specified by PATH. 
#!/usr/bin/env perl 

还可以加上-P参数来指定一些目录去寻找perl这个程序, #!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl的作用就是在/usr/local/bin和/usr/bin目录下寻找perl。

#!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl 
为了让程序更加的有可扩展性,可以写成 
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl,那么它除了在这两个目录寻找之外,还会在PATH变量中定义的目录中寻找

猜你喜欢

转载自blog.csdn.net/boyemachao/article/details/89948347