0%

Linux的 env 命令

env 在一个修改的环境中运行程序

env其实就是environment的缩写,用来查看或者修改当前的环境。

Linux是多用户的平台,为了每个用户都有自己的设置,env使用了比较多的环境变量,比如echo $HOME后不同的用户可以看到不同的路径。

官方定义为:

修改则可以用env命令进行管理。

官方定义为:

env - run a program in a modified environment

语法

语法如下所示:

1
$ env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

常用的参数为:

  • -i 开始一个新的空的环境

  • -u 取消设置的的变量

  • -C 更改工作目录

  • -S 分割输入参数

默认无参数

默认情况下,输入env会给出当前设置的环境和系统默认的环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ env
HOSTTYPE=x86_64
LANG=en_US.utf8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:
NAME=LOCALHOST
HOME=/home/username
USER=username
LOGNAME=username
SHELL=/usr/bin/bash
SHLVL=1
PWD=/home/username/mycode/c
OLDPWD=/home/username/mycode/python
PAGER=less
LESS=-R
...

设置环境变量

当然env最重要的还是设置环境变量,一般使用为:

1
$ env NAME=what-you-want-to-set

接下来使用echo $NAME就可以看到效果了。

全新的环境

如果希望运行程序的过程中,不受到原来环境的影响,可以使用-i参数,直接开启一个全新的环境。

1
$ env -i program

取消某些环境变量

通过-u来取消某些设置的环境变量,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ env -u PWD
HOSTTYPE=x86_64
LANG=en_US.utf8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:
NAME=LOCALHOST
HOME=/home/username
USER=username
LOGNAME=username
SHELL=/usr/bin/bash
SHLVL=1
OLDPWD=/home/username/mycode/python
PAGER=less
LESS=-R
...

可以看到与env相比,PWD变量已经不存在了。

更改工作路径

可以通过-C来更改工作的路径。

1
2
3
4
$ pwd
/home/username/linux/scripts
$ env -C .. pwd
/home/username/linux

进阶的传递多个参数

这个参数较多用在脚本中,-S后面可以跟多个参数,如果没有这个参数,则只能跟一个参数,比如以脚本为例:

1
#!/usr/bin/env perl -w -T

会报错

1
/usr/bin/env: 'perl -w -T': No such file or directory

此时加上-S就可以解决了,如下:

1
#!/usr/bin/env -S perl -w -T
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道