当前位置: 技术问答>linux和unix
C实现shell
来源: 互联网 发布时间:2016-08-10
本文导语: 本帖最后由 qinguan0619 于 2010-03-13 13:05:11 编辑 看到一个标准C实现shell功能的程序,下面加粗的一句代码看不懂。 我查看了man手册,getenv函数是用来取得“BSPROMPT”环境变量的名称。 这个环境变量是自己设的还是系统的...
我查看了man手册,getenv函数是用来取得“BSPROMPT”环境变量的名称。
这个环境变量是自己设的还是系统的?因为我找不到有关BSPORMPT相关的信息。
int main(int argc, char **argv) {
char cmd[80]; // Input command area.
char *source = NULL; // Where commands to send to parser come from.
char *arg[21]; // Arg list.
int statval; // Exec status value.
char *prompt="baby:"; // Command prompt, with default.
char *test_env; // getenv return value.
int numargs; // parse_cmd return value.
if (test_env=getenv("BSPROMPT"))
prompt=test_env;
while (1) {
// See if we need to get a line of input.
if(source == NULL) {
printf(prompt);
source = gets(cmd);
if(source == NULL) exit(0); // gets rtns NULL at EOF.
}
// Get the next command.
source = parse_cmd(source, arg, &numargs);
if (numargs == 0) continue;
// Exit command
if (!strcmp(arg[0],"exit")) {
if (numargs==1)
exit(0);
if (numargs==2) {
if (sscanf(arg[1],"%d",&statval)!=1) {
fprintf(stderr,"%s: exit requires an "
"integer status coden",
argv[0]);
continue;
}
exit(statval);
}
fprintf(stderr,"%s: exit takes one "
"optional parameter -integer statusn",
argv[0]);
continue;
}
// Run it.
if (fork()==0) {
execvp(arg[0],arg);
fprintf(stderr,"%s: EXEC of %s failed: %sn",
argv[0],arg[0],strerror(errno));
exit(1);
}
wait(&statval);
if (WIFEXITED(statval)) {
if (WEXITSTATUS(statval))
fprintf(stderr,"%s: child exited with "
"status %dn", argv[0],
WEXITSTATUS(statval));
} else {
fprintf(stderr,"%s: child died unexpectedlyn",
argv[0]);
}
}
}
|
BSPROMPT 是 Bash Prompt 的缩写?呵呵,看来像是让用户自己设置提示符的。
呵呵,不过是个提示符吗,这句去掉好像也不影响大局,你注释掉看看。
另外环境变量可以是全局也可以是用户的,只要有就好,
比如在你用户根目录下.bashrc中增加就好了(bash)
呵呵,不过是个提示符吗,这句去掉好像也不影响大局,你注释掉看看。
另外环境变量可以是全局也可以是用户的,只要有就好,
比如在你用户根目录下.bashrc中增加就好了(bash)
|
用户设定的
貌似
BSPROMPT 只是为了在source为NULL时,打印出设定的信息而已
无伤大雅的
貌似
BSPROMPT 只是为了在source为NULL时,打印出设定的信息而已
无伤大雅的