env命令时gnu的coreutils包内的一个软件,它的功能是:在一个修改后的环境里执行命令。

通俗的讲:一个linux软件可能被安装在好几个地方,举个例子:在最新的centos中perl的版本为5.16,而我在home目录下安装了最新的5.26.1版本,这样在同一个系统内,有2个perl的执行程序:

[root@noi ~]# man env
[root@noi ~]# which -a perl
/root/perl5/perlbrew/perls/perl-5.26./bin/perl
/usr/bin/perl

到底执行哪一个,取决于PATH环境变量内路径的排列顺序

[root@noi ~]# echo $PATH
/root/perl5/perlbrew/bin:/root/perl5/perlbrew/perls/perl-5.26./bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

在被环境中,显然执行的是home目录下的5.26版本。但是这个时候,我想执行一个程序在5.16版本下,我可以使用:

[root@noi ~]# /usr/bin/perl --version

This is perl , version , subversion  (v5.16.3) built for x86_64-linux-thread-multi
(with registered patches, see perl -V for more detail)

同时,我也可以利用env命令,来达到相同的目的:

[root@noi ~]# env PATH=/usr/bin perl --version

This is perl , version , subversion  (v5.16.3) built for x86_64-linux-thread-multi
(with registered patches, see perl -V for more detail)

注意:这里PATH变量被我修改为 /usr/bin ,这就是man手册说的,env可以在一个修改了的环境下,执行命令的含义。看下面,没有修改PATH时,执行的情况:

[root@noi ~]# env perl --version

This is perl , version , subversion  (v5.26.1) built for x86_64-linux
(with registered patch, see perl -V for more detail)

看到没,执行的是home目录版本,也就是依据上面PATH原值,来执行的。

依据这个特性,有时候我们在写脚本,比如perl脚本的时候,如果想运行当前perl环境下的脚本,而不是固定目录的 /usr/bin/perl ,可以用下面的写法替代 /usr/bin/perl

#!/usr/bin/env perl

这样写,其实就是把perl放到当前环境下,来执行perl了。

env命令详解的更多相关文章

  1. Linux env命令详解

    env:查询环境变量 常用的命令展示 查看当前环境的环境变量 [root@localhost ~]# env HOSTNAME=localhost.localdomain SELINUX_ROLE_R ...

  2. sed命令详解 vim高级技巧 shell编程上

    第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...

  3. Linux grep/egrep命令详解

    grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来 grep搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2. grep的规则表达式( ...

  4. 【docker-compose】docker-compose.yml文本内容详解 + docker-compose命令详解 + docker-compose启动服务容器时区设置

    参考地址:https://blog.csdn.net/Kiloveyousmile/article/details/79830810 参考地址:https://docs.docker.com/comp ...

  5. [SHELL]:let 命令详解

    [SHELL]:let 命令详解 摘自:https://blog.csdn.net/happygongzhuo/article/details/6819099 let :简单的计算器  语 法let[ ...

  6. Dockerfile命令详解

    使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1.主要组成部分     dockerfile执行build命令时,是从上倒下依次执行 ...

  7. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  8. Dockerfile 命令详解及最佳实践

    Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...

  9. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

随机推荐

  1. Jmeter测试报告可视化(Excel, html以及jenkins集成)

    做性能测试通常在none GUI的命令行模式下运行Jmeter. 例如: jmeter -n -t /opt/las/JMeter/TestPlan/test.jmx -l /opt/las/JMet ...

  2. Shell程序荟萃

    --------------纯输出----------------1.sh #!/bin/sh echo -e "Hello!world!\a\n"exit 0 --------- ...

  3. PHPCMS增加投票选项代码

    <script src="jquery-1.10.1.js"></script> <tr> <th width="20%&quo ...

  4. 45个很实用的 Oracle 查询语句小结

     这里我们介绍的是 40+ 个很实用的 Oracle 查询语句,主要涵盖了日期操作,获取server信息.获取运行状态.计算数据库大小等等方面的查询. 这些是全部 Oracle 开发人员都必备的技 ...

  5. Shader Object及Program操作API

    Shader Object及Program操作API Program:  1. GLuint glCreateProgram( void );//创建 2. void glDeleteProgram( ...

  6. python之poplib模块下载并解析邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之poplib模块下载并解析邮件 #https://github.com/michaelliao ...

  7. python字符串格式化--dict传参

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python字符串格式化--dict传参 print "I'm %(name)s. I'm %(a ...

  8. 在启动vsftpd,有时会报错

    在启动vsftpd,有时会报错:C:>ftp 192.168.0.101Connected to 192.168.0.101.220 (vsFTPd 2.0.5)User (192.168.0. ...

  9. 微信小程序条码、二维码生成模块

    代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  10. 使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

    上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简单介绍 中我介绍了怎样从phonegap官网上下载源代码并启动第一个应用,今天我们把phonegap的应用略微改一下,让他实现 ...