Shell中exec和eval的区别
默认情况下,如果直接执行 bash -c command,command 会以子进程方式运行,执行完成后返回父进程继续执行。
# exec
使用 exec bash -c command,父进程的 pid 会转移给 command,这时实际上父级 shell 已经退出,所以无法执行 exec 后面的脚本。
# eval
假设 command 中包含 export 之类的命令,如果采用 bash -c 的方式,export 的变量是无法在父级 shell 中获取到的。这时采用 eval 就可以了。和 exec 相同的是:进程 pid 没有变。但它没有替换老的 shell,而是在老的 shell 里执行新的命令。
# bash -l
login: 加载 bashrc 和 profile 等文件
- 原文出处:
- 原文作者: https://github.com/saltbo
- 原文链接:
- 版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。