env命令詳解


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.1/bin/perl
/usr/bin/perl

到底執行哪一個,取決於PATH環境變量內路徑的排列順序

[root@noi ~]# echo $PATH
/root/perl5/perlbrew/bin:/root/perl5/perlbrew/perls/perl-5.26.1/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 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 33 registered patches, see perl -V for more detail)

同時,我也可以利用env命令,來達到相同的目的:

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

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

注意:這里PATH變量被我修改為 /usr/bin ,這就是man手冊說的,env可以在一個修改了的環境下,執行命令的含義。看下面,沒有修改PATH時,執行的情況:

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

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

看到沒,執行的是home目錄版本,也就是依據上面PATH原值,來執行的。

依據這個特性,有時候我們在寫腳本,比如perl腳本的時候,如果想運行當前perl環境下的腳本,而不是固定目錄的 /usr/bin/perl ,可以用下面的寫法替代 /usr/bin/perl 

#!/usr/bin/env perl

這樣寫,其實就是把perl放到當前環境下,來執行perl了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM