zoukankan      html  css  js  c++  java
  • linux

    Description
    在linux的一些脚本,需在开头一行指定脚本的解释程序。

    #!/usr/bin/env bash            #lends you some flexibility on different systems

    #!/usr/bin/bash               #gives you explicit control on a given system of what executable is called


    #!/usr/bin/env python            #这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。
                         #当系统看到这一行的时候,首先会到env设置里查找python的安装路径,

                          再调用对应路径下的解释器程序完成操作。


    #!/usr/bin/python   #告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;


    #!/usr/bin/env -S -P /usr/local/bin:/usr/bin:${PATH} perl
    #加上-P参数来指定一些目录去寻找perl这个程序, 
    #在/usr/local/bin和/usr/bin和PATH变量中定义的目录下寻找perl。


    手册的定义

    env - run a program in a modified environment

     

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

     

    Advantage & Disadvantage
    在某些情况下,第一个可能是首选(如运行python脚本与多个版本的python,而不必重做可执行);但是在以安全性为重点的情况下,后者将是首选,因为它限制了代码注入的可能性。
    这跟linux系统里安装python的目录有关。#!/usr/bin/python相当于写死了python路径;#!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法。
    “ #!/usr/bin/env bash”  的好处是可以查找当前环境中程序的默认版本。这样,您不必在系统上的特定位置查找它,因为这些路径可能位于不同系统上的不同位置,只要它在你的路径上,你就会找到它。
    一个缺点是如果你想支持Linux,你将无法传递多个参数(例如你将无法编写/usr/bin/env awk -f),如POSIX is vague关于如何解释这一行,并且Linux在第一个空格之后解释所有内容以表示单个参数。您可以在某些版本的env上使用/usr/bin/env -S来解决这个问题,但随后脚本将变得更不便携,并且在相当近期的系统上中断(例如,如果不是更晚的话,甚至是Ubuntu 16.04)。
    另一个缺点是,由于您没有调用显式可执行文件,因此可能存在错误,并且存在多用户系统安全问题(例如,如果有人设法在您的路径中获取名为bash的可执行文件)。

     

    Operation
    env -- It will print all your environment variables.

     

    env python -- 发现可以进到python的shell里面。因此,脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它。

     

    ​​env bash / echo $BASH -- It will print your bash path (according to the environment variable list) that you should use to build your correct shebang path in your script.

     

     

    Reference
    Why is #!/usr/bin/env bash superior to #!/bin/bash?
    ————————————————
    版权声明:本文为CSDN博主「vinci587」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/playboy2021/article/details/107798708

  • 相关阅读:
    剑指offer(18)二叉搜索树的后续遍历
    剑指offer(17)层次遍历树
    剑指offer(16)栈的压入、弹出序列
    剑指offer(15)
    剑指offer(14)
    剑指offer(13)
    剑指offer(12)
    剑指offer(11)
    2020 年 11 月编程语言排行榜,Python 势如破竹,超越 Java?
    Python 除了 time.sleep,你还有一个暂停代码的方法
  • 原文地址:https://www.cnblogs.com/jiguang321/p/14917533.html
Copyright © 2011-2022 走看看