摘要
在底层框架研发中, 框架启动脚本,在调用核心入口类之前需要先获取以及解析环境变量,然后解析到的环境变量可能想要在框架启动类中做info日志输出。
java代码
public class EnvTest {
public static void main(String[] args) {
System.out.println("获取到父进程的环境变量的值为:"+ System.getenv("test"));
}
}
shell脚本
#!/bin/bash
export test=/home/test
exec java -cp Flink1.8-1.0-SNAPSHOT.jar com.pg.EnvTest
说明
- export test=/home/test 用于将test属性导出为环境,从而可以在java用 System.getenv()获取
- exec
- 工作原理:
当在shell脚本中使用exec命令时,shell会停止当前脚本的执行,转而执行exec后面的命令。
执行完毕后,该命令将取代当前shell进程,而不是启动一个新的子进程。这意味着exec命令后面的脚本内容将不再执行。- - 特点
替换当前shell进程:exec命令执行后,当前shell进程将被替换为指定的命令或程序,而不是启动一个新的子进程。
不再执行后续脚本:exec命令后面的脚本内容将不会被执行,因为当前shell进程已经被替换。 - 此处的作用
用于在脚本中启动一个长时间运行的程序,并希望脚本结束后不要留下一个空的Shell进程。加入在a.sh 执行了/home/test/b.sh
则实际上开启一个子进程执行b.sh 并且b.sh执行完毕后会释放掉b.sh所有的资源(变量内存等),然后会返回到父shell也就是a.sh.
二exec不是开启新子进程,而是替换掉当前进程。
- 工作原理: