引子
有一个需求:代码运行环境为python 3.7,用python获取系统所有别名信息。
首先想到的,就是使用subprocess模块创建子进程,执行alias命令并获取返回值。于是出现了这样一段代码:
毫不犹豫敲下回车键执行,结果呈现的是:
这是什么情况?为什么会报FileNotFoundError?问题出在哪儿?
shell内建命令和外部命令
先介绍一个概念,linux的内建命令和外部命令。
内建命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令写在bash源码里面,由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。
外部命令是linux系统中的实用程序部分,通常外部命令的实体并不包含在shell中,而是存放在文件中。因此,在系统加载时并不随系统一起被加载到内存中,只有在需要时才将其调用内存,由shell通过环境变量PATH,管理其执行的路径查找、加载存放,并控制其执行。
在上述例子中,调用shutil模块确认alias命令的存放位置,返回结果为空。
在shell中使用type命令查看,确认alias为内建命令