前言
写之前我们先看看一个完整的shell都包括了什么
$符号前面(包括这个符号)就是命令行提示符,后面就是命令行字符串了
1.命令行提示符,字符串的打印
1.1命令行提示符
命令行字符串的格式:
[用户名@主机名 路径]$
这三个其实就是环境变量,这就很简单了,getenv()获取环境变量
const char *UserName()
{
char *username = getenv("USER");
if (username)
return username;
else
return "None";
}
const char *HostName()
{
char *hostname = getenv("HOME");
if (hostname)
return hostname;
else
return "None";
}
const char *CurrentWorkDir()
{
char *current = getenv("PWD");
if (current)
return current;
else
return "None";
}
2.命令行字符串
这里输入命令行字符串,我们不能用scanf,当我们的命令行字符串带有空格的时候scanf就无法控制了。所以这里我们用fgets()
文件的操作下节会说,先跟着用;注意这里fgets会有一个自带的换行符,所以我们要对他做一下去换行的操作。
int Interactive(char out[], int size)
{
printf("[%s@%s %s]$ ", UserName(), HostName(), CurrentWorkDir());
fgets(out, size, stdin);
out[strlen(out) - 1] = '\0';
return strlen(out);
}
2.0对命令行字符串进行切割
void Split(char in[])
{
int i=0;
argv[i++