shell:#!/usr/bin/env python作用是什么
我们经常会在别人的脚本文件里看到第一行是下面这样
#!/usr/bin/python
或者
#!/usr/bin/env python
那么他们有什么用呢?
要理解它,得把这一行语句拆成两部分。
第一部分是 #!
第二部分是 /usr/bin/python 或者 /usr/bin/env python
关于 #! 这个符号,其实它是有名字的,叫做 Shebang 或者Sha-bang ,有的翻译组将它译作 释伴,即“解释伴随行”的简称,同时又是Shebang的音译。
Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符。在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器。
那么加和不加开头这一句有什么区别呢?
如果不加#!/usr/bin/python的话,你每次执行这个脚本时,都得这样 python xx.py ,

有没有一种方式?可以省去每次都加 python 呢?
当然有,你可以文件头里加上#!/usr/bin/python ,那么当这个文件有可执行权限时,直接写这个脚本文件,就像下面这样。

明白了这个后,再来看看 #!/usr/bin/env python 这个 又是什么意思 ?
当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin )这几个路径里去依次查找名为python的可执行文件。这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里,当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
最后个人感觉应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都是 /usr/bin/python
相关文章:
shell:#!/usr/bin/env python作用是什么
我们经常会在别人的脚本文件里看到第一行是下面这样 #!/usr/bin/python或者 #!/usr/bin/env python 那么他们有什么用呢? 要理解它,得把这一行语句拆成两部分。 第一部分是 #! 第二部分是 /usr/bin/python 或者 /usr/bin/env python 关于 #! 这个…...
计算机行业AIGC算力时代系列报告-ChatGPT芯片算力:研究框架
报告下载: 计算机行业AIGC算力时代系列报告-ChatGPT芯片算力:研究框架 简介 “AI算力时代已经来临,计算机行业正在经历着一场前所未有的变革!” 这是一个充满活力和兴奋的时代,人工智能(AI)已…...
『MyBatis技术内幕』源码调试前提
准备源代码包 下载源代码 3.4.6 版本 https://github.com/mybatis/mybatis-3/releases?page2 通过 idea 导入然后回自动下载所有依赖,根据 3.4.6 版本的 pom.xml 找到依赖的 mybatis-parent 版本 <parent><groupId>org.mybatis</groupId><ar…...
# Linux最新2022年面试题大汇总,附答案
# Linux最新2022年面试题大汇总,附答案 ### [1、cp(copy单词缩写,复制功能)](最新2021年面试题大汇总,附答案.md#1cpcopy单词缩写复制功能) cp /opt/java/java.log /opt/logs/ ;把java.log 复制到/opt/logs/下 cp /…...
css中重难点整理
一、vertical-align 在学习vertical-align的时候,可能会很困惑。即使网上有一大推文章讲veitical-align,感觉看完好像懂了,等自己布局的时候用到vertical-align的时候好像对它又很陌生。这就是我在布局的时候遇到的问题。 本来vertical-align就很不好理…...
JavaScript-扫盲
文章目录1. 前言2. 第一个 JavaScript 程序3. javaScript 的基础语法3.1 变量3.2 数据类型3.3 运算符3.4 条件语句3.5 数组3.6 函数3.7 作用域3.8 对象4. WebAPI4.1 DOM 基本概念4.2 常用 DOM API4.3 事件4.4 操作元素4.5 网页版猜数字游戏4.6 留言版1. 前言 提问 java 和 java…...
bpftrace 笔记
bpftrace -e BEFIN {printf("hello world!\n");}获取调用 vfs_read 函数的进程id, 每2s打印一次 bpftrace -e kprobe:vfs_read {ID pid;} interval:s:2 {printf{"ID:%d\n", ID);}用户态调试 bpftrace -e uprobe:/*/a.out:and {printf("ID:%d\n&qu…...
DELL-Vostro-5468电脑 Hackintosh 黑苹果efi引导文件
原文来源于黑果魏叔官网,转载需注明出处。硬件型号驱动情况主板DELL-Vostro-5468处理器Intel Core i3-7100U 2.40 GHz, 3M Cache已驱动内存Samsung 8GB DDR4-2133MHz已驱动硬盘TOPMORE CAPRICORNUS NVMe 1TB已驱动显卡Intel HD Graphics 620已驱动声卡Realtek ALC2…...
阶段二11_面向对象高级_学生管理系统案例2
主要内容: 添加学生 static关键字一.添加学生时判断id是否存在 0.思路图片: 04/图片/2_添加学生判断id存在的问题分析.png 1.思路实现详细步骤: StudentController【客服接待】 /** 接收到学生id后,判断该id在数组中是否存在 这…...
spring源码篇(3)——bean的加载和创建
spring-framework 版本:v5.3.19 文章目录bean的加载bean的创建总结getBean流程createBean流程doCreateBean流程bean的加载 beanFactory的genBean最常用的一个实现就是AbstractBeanFactory.getBean()。 以ApplicationContext为例,流程是: ApplicationCon…...
Spring 中事务的传播级别
Spring 中事务的传播级别 REQUIRED(默认):默认的隔离级别,如果当前存在一个事务,就加入该事务,如果当前没有事务,就创建一个新的事务。 REQUIRED_NEW:不管当前是否存在事务,都创建一个新的事物…...
ECharts可视化库--常用组件
目录 一.series系列 二.常见组件 1.标题title 2.图例legend 3.工具栏toolbox 4.提示框tooltip 5.坐标轴 xAxis yAsix 6.series系列 上一篇已经介绍了ECharts库的导入工作和绘制基本的图标,今天我们来了解一下常用的组件,如果对数据可视化感兴…...
openpnp - 设备开机后, 吸嘴校验失败的解决方法
文章目录openpnp - 设备开机后, 吸嘴校验失败的解决方法概述重新校验吸嘴ENDopenpnp - 设备开机后, 吸嘴校验失败的解决方法 概述 设备开机后, 默认会校验吸嘴座上已经安装的2个吸嘴. 如果开机校验吸嘴失败, 就需要用向导重新校验失败的吸嘴. 具体是哪个吸嘴校验失败, 可以看…...
【Linux学习】基础IO——软硬链接 | 制作动静态库
🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 基础IO🍓软硬链接🌲软链接🌲硬链接🍓动静态库&…...
如何分辨on-policy和off-policy
on-policy的定义:behavior policy和target-policy相同的是on-policy,不同的是off-policy。 behavior policy:采样数据的策略,影响的是采样出来s,a的分布。 target policy:就是被不断迭代修改的策略。 如果是基于深度…...
第三讲:ambari编译后的安装包制作流程说明
一、概述 前两讲,我们已经将 Ambari 源码编译成功。现在我们想将 Ambari 编译后的 rpm 包,都放到 yum 本地仓库中,这样 Ambari 与 HDP 在安装部署时,就直接使用的我们自己编译的安装包了。 Ambari 的 rpm 包,有这么几类: ambari-server rpmambari-agent rpmambari metr…...
Python进阶-----面对对象6.0(绑定方法[类方法、静态方法]与内置方法)
目录 前言: 1.绑定方法 (1)实例方法 (2)类方法 (3)静态方法 2.类型检测 (1)issubclass() 函数 (2)isinstance() 函数 3.内置方法…...
java8四大基本函数式接口
1.什么是函数式接口? 只包含一个抽象方法的接口,称为函数式接口你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)我们可以在任意函数式接口上使用Fu…...
Junit测试框架
一、简介 Junit框架是一个开源的Java语言单元测试框架,Java方向使用最广泛的单元测试框架,使用Java开发者都应该学习Junit并能掌握单元测试的编写。 对于Junit和Selenium的关系:通俗点来说Selenium如果比喻为灯泡,那么Junit就是电…...
操作系统复习题
什么是线程? 线程(Thread):轻量级进程,是操作系统进行调度的最小单位。一个线程是一个任务(一个程序段)的一次执行过程。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程…...
别再纠结了!用Python的Pymoo库5分钟搞定多目标优化,找到你的Pareto最优解
用Python的Pymoo库5分钟实现多目标优化:从理论到实战的完整指南 当你在设计一款新产品时,既要控制成本又要保证性能;当你在调整机器学习模型时,既要提高准确率又要降低计算资源消耗——这些看似矛盾的需求,正是多目标优…...
TreeSize专业评测:德国老牌磁盘分析工具的实力
在Windows系统工具领域,德国软件一向以严谨和专业著称。 TreeSize作为德国的老牌磁盘空间分析工具,多年来一直深受用户信赖。 本文将从专业角度对这款工具进行全面评测,帮助读者更好地了解它的实力。 首先来看TreeSize的定位,它是…...
【图像加密】基于 AES算法的图像位平面加密解密算法附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
北京 SEO 优化公司哪家比较专业
了解北京 SEO 优化公司的选择,哪家更专业? 在当今互联网时代,拥有一个高效的SEO优化策略是企业在竞争中脱颖而出的关键。而在北京这个国际大都市,众多SEO优化公司云集,如何选择一家专业的SEO优化公司成为了许多企业的…...
怎样评估数据化管理?数据化管理如何持续改进?
在数据这个行当工作了这么多年,我经常会和不同公司的朋友聊天。大家刚开始做数据化管理时总是干劲十足,买工具、建报表、做大屏。但一两年后,常常陷入一种困惑:钱花了,屏挂了,但感觉业务还是老样子。这时候…...
ISO-SLAM-seq:全长 RNA代谢测序服务
ISO-SLAM-seq 技术,是 SLAM-seq 与 ISO-seq 的结合,通过研发成熟的核苷类似物 4-硫尿苷 (S4U) 代谢 RNA 标记方法和基于 Oxford Nanopore Technology 纳米孔测序平台或者 PacBio 的三代全长转录组测序方法,ISO-SLAM-seq 能检测整合到总 RNA 中…...
SearXNG 多架构 Docker 镜像:支持 amd64、arm64 和 arm/v7 的完整指南
SearXNG 多架构 Docker 镜像:支持 amd64、arm64 和 arm/v7 的完整指南 【免费下载链接】searxng-docker The docker-compose files for setting up a SearXNG instance with docker. 项目地址: https://gitcode.com/gh_mirrors/se/searxng-docker 想要在五分…...
收藏备用!小白程序员必看,大模型核心原理拆解(通俗易懂版)
本文专为CSDN小白程序员、AI入门者打造,用“技术拆解通俗类比”的方式,深入解析大模型的核心原理,避开专业术语壁垒。明确大模型的AI分支定位,拆解其三大底层逻辑,补充微调、提示工程的实操要点,澄清新手常…...
车轨桥刚柔耦合仿真与 Simpack 与 Abaqus 联合仿真那些事儿
1.simpack与abaqus联合仿真教程 2.车轨桥刚柔耦合仿真教程,柔性钢轨建模,fbi文件生成,ftr文件书写 3.包括模型在工程仿真领域,车轨桥刚柔耦合仿真以及 Simpack 与 Abaqus 联合仿真都是极具实用价值的技术,今天就来给大…...
WinForm实战:C#如何优雅地调用外部exe并传递多个参数(附完整代码示例)
WinForm实战:C#如何优雅地调用外部exe并传递多个参数(附完整代码示例) 在Windows桌面应用开发中,经常需要与其他程序进行交互。想象这样一个场景:你正在开发一个数据可视化工具,需要调用Python脚本处理原始…...
