命令行本质
命令行/终端的本质i是一个进程,最流行的是bash/zsh,读取输入并且做出反应。
- 内置命令,直接执行之
- 查找$PATH中的对应可执行程序并将参数交给它
- 如果是exit,终止自己
大多数情况下,执行一个命令=fork一个新的进程
- ./xx.sh sh java python mvn
- source exec
命令的四要素
如果四要素完全相同,那么命令一定可以重现,如果命令出现诡异问题,那么一定是四要素之一发生了改变,碰到奇怪的问题,先问自己,四要素是啥?
四要素
1. 可执行程序 executable
- 什么是可执行程序
- windows:exe/bat/com
- unix:+x(rwx里面的x)
- Shell如何找到可执行程序
- 内置命令
- alias
- 挨个再PATH里面找,找到就执行,找不到就报错
- 额外的,Windows会再当前目录里面找
- 二进制可执行程序
- 符合对应操作系统的要求,能够直接执行,无需解释器
脚本
参数完全由对应的可执行程序负责解析
但是shell可能偷偷摸摸的在参数中动手脚
启动命令的路径 pwd
- 相对路径都是相对于这个路径
在java中的应用
非常非常非常重要
- 和进程相绑定的一组键值对
- 所有的操作系统都支持
- 但是windows上不区分大小写
- 所有的变成语言都提供原生支持
- 可被子进程所继承
- 但是不能逆向传递
- 所有的操作系统都支持
- 再历史上,使用一些重要的环境变量用于存放重要信息
- PATH/PS1/LC_ALL/LANG
- CLASSPATH/GOPATH