Linux 使用 which 与 $()来定位并执行命令

Linux 使用 which 与 $() 来定位并执行命令,示例如下:

[cdp@cdppguat data-api]$ $(which java) -version   
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)

这里用到了两个 shell 中的知识:

一是 which 命令,which 命令的功能是从用户的 path 目录中搜索可执行文件并返回。

二是 $() 的语法,$() 表示执行 () 里的命令并将结果返回。

如果你要在某个脚本中使用某个命令去执行一个程序,一般是第三方程序,那么这种写法会更 “安全”,也更易于移植。首先 $(which java) 获取的是绝对路径,可以规避相对路径带来的不可控异常,其次 $(which java) 可以便于在不同的服务器上运行。

当然,前提是你的程序已经配置了环境变量。

比如:服务器 A 上的 Java 安装位置如下:

[cdp@cdppguat data-api]$ echo $(which java)
/opt/jdk1.8.0_201/bin/java

服务器 B 上的 Java 安装位置如下:

[cdpadmin04@sltwy4qasyy data-api]$ echo $(which java)
/usr/local/java/jdk/bin/java

如果要在服务器 A&B 上都运行一个脚本来执行一个 Java 程序,如果你在服务器 A 上的脚本是写的路径 /opt/jdk1.8.0_201/bin/java,那么这个脚本放到服务器 B 上是肯定运行不了的,因为服务器 B 上的 /opt/jdk1.8.0_201/bin/java 位置找不到 Java 命令。

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注