脚本网 > 脚本专栏 > linux shell > Linux实现自主Shell命令行解释器
Linux实现自主Shell命令行解释器
admin linux shell
1. 获取用户名的接口
通过环境变量来获取
我们需要用到的接口getenv



//获取用户名
const char* GetUserName()
{
const char* name = getenv("USER");
return name == NULL ? "None" : name;
}
//获取主机名
const char* GetHostName()
{
const char* hostname = getenv("HOSTNAME");
return hostname == NULL ? "None" : hostname;
}
//获取当前路径
const char* GetPwd()
{
const char* pwd = getenv("PWD");
return pwd == NULL ? "None" : pwd;
}
2. 等待用户输入接口
当我们没有输入时,我们会发现命令行会卡在这里等待我们输入

我们也让我们自己的命令行能等待输入

我们可以采用fgets以文件形式读取一行,也可以使用gets读取一行字符串
我们接下来进行C/C++混编的方式,因为我们后面会用到系统调用,而这些系统调用都是用C写的,如果我们纯用C++来实现的话可能会要适配某些接口。
我们下来用fgets实现



效果展示:

我们会发现最后多了一个空行,这里为什么会多一个空行呢?因为我们在输入完字符串后还按了一次回车,我们不想让它有这一行空行该怎么办?我们在输入字符串后后面还会有个\n,比如我们输入的是"ls -a -l"最后再按一次回车就变成了"ls -a -l \n",我们只需要输入完之后把最后的\n置为0就好了

效果展示:

