Linux env命令介绍
env命令是environment的缩写,它可以用来显示或设置当前shell的环境变量。环境变量是一些存储在系统中的键值对,可以影响程序的运行。例如,PATH变量存储了系统搜索可执行文件的目录,LANG变量存储了系统的语言设置,等等。env命令可以用来查看所有的环境变量,也可以用来临时改变环境变量,或者在一个空白的环境中运行一个程序。env命令还可以用来启动正确的解释器,例如在shell脚本的第一行写#!/usr/bin/env bash
,就可以让系统自动找到bash的位置,而不需要指定绝对路径。
Linux env命令适用的Linux版本
env命令是一个标准的Unix命令,它适用于所有的Linux发行版,包括Ubuntu, Debian, CentOS, Fedora, RedHat, Arch, Gentoo, etc. 一般来说,env命令已经预装在系统中,不需要额外安装。如果你的系统中没有env命令,你可以使用包管理器来安装它。例如,
在Ubuntu或Debian中,你可以使用sudo apt install coreutils
来安装env命令,它是coreutils包的一部分。
在CentOS或Fedora中,你可以使用sudo yum install coreutils
或sudo dnf install coreutils
来安装env命令。
在Arch中,你可以使用sudo pacman -S coreutils
来安装env命令。
在Gentoo中,你可以使用sudo emerge sys-apps/coreutils
来安装env命令。
Linux env命令的基本语法
env命令的基本语法如下:
env [选项]... [-] [变量=值]... [命令 [参数]...]
其中,选项可以用来控制env命令的行为,变量=值可以用来设置或修改环境变量,命令和参数可以用来指定要在修改后的环境中运行的程序。如果没有指定命令和参数,env命令会打印出当前的环境变量。
Linux env命令的常用选项或参数说明
env命令有以下常用的选项或参数:
选项 | 说明 |
---|---|
-i, --ignore-environment | 忽略当前的环境变量,只使用指定的变量=值 |
-u, --unset=变量 | 删除指定的环境变量 |
-0, --null | 用空字符而不是换行符来分隔输出的环境变量 |
--help | 显示帮助信息并退出 |
--version | 显示版本信息并退出 |
Linux env命令的实例
下面是一些使用env命令的实例,你可以根据你的需要进行修改或添加。
实例1:查看所有的环境变量
如果不带任何参数,env命令会打印出当前的所有环境变量,每个变量占一行,格式为变量=值。例如:
[linux@bashcommandnotfound.cn ~]$ env
USER=linux
HOME=/home/linux
PATH=/usr/local/bin:/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/bash
...
实例2:设置或修改环境变量
如果指定了变量=值的参数,env命令会设置或修改相应的环境变量,然后运行指定的命令。如果没有指定命令,env命令会打印出修改后的环境变量。例如,我们可以用env命令来修改PATH变量,让系统优先搜索/home/linux/bin目录下的可执行文件:
[linux@bashcommandnotfound.cn ~]$ env PATH=/home/linux/bin:$PATH
或者,我们可以用env命令来修改LANG变量,让系统使用中文显示信息:
[linux@bashcommandnotfound.cn ~]$ env LANG=zh_CN.UTF-8
实例3:在空白的环境中运行命令
如果使用了-i或--ignore-environment选项,env命令会忽略当前的环境变量,只使用指定的变量=值,然后运行指定的命令。如果没有指定变量=值和命令,env命令会打印出一个空白的环境。这样可以避免一些环境变量对程序的影响。例如,我们可以用env命令来在一个空白的环境中运行python:
[linux@bashcommandnotfound.cn ~]$ env -i python
Python 3.9.1 (default, Dec 8 2020, 07:51:42)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
实例4:删除环境变量
如果使用了-u或--unset=变量选项,env命令会删除指定的环境变量,然后运行指定的命令。如果没有指定命令,env命令会打印出删除后的环境变量。这样可以避免一些不需要的环境变量对程序的影响。例如,我们可以用env命令来删除LANG变量,让系统使用默认的语言设置:
[linux@bashcommandnotfound.cn ~]$ env -u LANG
实例5:用空字符分隔输出的环境变量
如果使用了-0或--null选项,env命令会用空字符而不是换行符来分隔输出的环境变量。这样可以方便一些程序处理输出的结果。例如,我们可以用env命令和xargs命令来打印出所有的环境变量的名称:
[linux@bashcommandnotfound.cn ~]$ env -0 | xargs -0 -n1 echo | cut -d= -f1
USER
HOME
PATH
LANG
SHELL
...
实例6:启动正确的解释器
env命令还可以用来启动正确的解释器,例如在shell脚本的第一行写#!/usr/bin/env bash
,就可以让系统自动找到bash的位置,而不需要指定绝对路径。这样可以提高脚本的可移植性,因为不同的系统可能安装bash的位置不同。例如,我们可以写一个简单的shell脚本,用env命令来启动bash:
#!/usr/bin/env bash
echo "Hello, world!"
然后,我们可以给这个脚本执行权限,并运行它:
[linux@bashcommandnotfound.cn ~]$ chmod +x hello.sh
[linux@bashcommandnotfound.cn ~]$ ./hello.sh
Hello, world!
Linux env命令的注意事项
- env命令只能临时改变环境变量,如果想要永久改变环境变量,需要修改相关的配置文件,例如~/.bashrc或~/.profile等。
- env命令不会改变当前shell的环境变量,只会影响子进程的环境变量。如果想要改变当前shell的环境变量,可以使用export命令或source命令。
- env命令不会检查变量=值的格式是否正确,如果指定了错误的格式,可能会导致一些程序运行异常。例如,如果指定了
env PATH=abc
,那么系统就无法找到任何可执行文件,除非abc目录下有相应的文件。 - 如果你的系统中没有env命令,你可能会看到
bash: env: command not found
的错误提示,这时你需要安装env命令,或者使用其他的方法来查看或修改环境变量。
Linux env命令的相关命令
以下是一些和env命令相关的命令,你可以点击链接查看更多的介绍和用法:
评论区