求shell的源代码

为当前最终发行版之前的所有版本提供支持
回复
zero_hsy
帖子: 37
注册时间: 2013-03-03 10:45
系统: ubuntu
送出感谢: 8 次
接收感谢: 0

求shell的源代码

#1

帖子 zero_hsy » 2013-03-12 21:49

大家好,我想知道shell的源代码是什么,用C如何写下来,但是没有找到,有哪为好心的人能给我发一份?谢谢!!
头像
灰色小狼
帖子: 4572
注册时间: 2008-12-06 10:38
系统: Arch
送出感谢: 21 次
接收感谢: 30 次

Re: 求shell的源代码

#2

帖子 灰色小狼 » 2013-03-12 21:52

这些用户感谢了作者 灰色小狼 于这个帖子:
zero_hsy (2013-03-13 15:21)
评价: 3.7%
头像
YeLee
论坛版主
帖子: 26408
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
送出感谢: 25 次
接收感谢: 307 次
联系:

Re: 求shell的源代码

#3

帖子 YeLee » 2013-03-13 10:33

任何一个shell都不是小工程。 :em04
这些用户感谢了作者 YeLee 于这个帖子:
zero_hsy (2013-03-13 15:21)
评价: 3.7%
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
guyanqiu
帖子: 360
注册时间: 2009-05-05 23:42
送出感谢: 5 次
接收感谢: 10 次

Re: 求shell的源代码

#4

帖子 guyanqiu » 2013-03-13 10:50

Unix/Linux编程实践那本书里有简介SHELL的写法的例子,最简化
这里只提供最小的那个例子,第一个版本的
smsh.h

代码: 全选

#define	YES	1
#define	NO	0

char	*next_cmd();
char	**splitline(char *);
void	freelist(char **);
void	*emalloc(size_t);
void	*erealloc(void *, size_t);
int	execute(char **);
void	fatal(char *, char *, int );

int	process();
smsh1.c

代码: 全选

/**  smsh1.c  small-shell version 1
 **		first really useful version after prompting shell
 **		this one parses the command line into strings
 **		uses fork, exec, wait, and ignores signals
 **/

#include	<stdio.h>
#include	<stdlib.h>
#include	<unistd.h>
#include	<signal.h>
#include	"smsh.h"

#define	DFL_PROMPT	"> "

int main()
{
	char	*cmdline, *prompt, **arglist;
	int	result;
	void	setup();

	prompt = DFL_PROMPT ;
	setup();

	while ( (cmdline = next_cmd(prompt, stdin)) != NULL ){
		if ( (arglist = splitline(cmdline)) != NULL  ){
			result = execute(arglist);
			freelist(arglist);
		}
		free(cmdline);
	}
	return 0;
}

void setup()
/*
 * purpose: initialize shell
 * returns: nothing. calls fatal() if trouble
 */
{
	signal(SIGINT,  SIG_IGN);
	signal(SIGQUIT, SIG_IGN);
}

void fatal(char *s1, char *s2, int n)
{
	fprintf(stderr,"Error: %s,%s\n", s1, s2);
	exit(n);
}
后续版本就逐渐复杂了,我觉得先看懂最简单的,再研究比较复杂的比较好一些。
附件
bookcode.zip
这个是第九章的源代码。
(11.85 KiB) 下载 17 次
这些用户感谢了作者 guyanqiu 于这个帖子:
zero_hsy (2013-03-13 15:21)
评价: 3.7%
-----------------------
在迷茫中追逐,在追逐中迷茫……
-----------------------
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 求shell的源代码

#5

帖子 eexpress » 2013-03-13 11:10

不重复发明轮子。

用好系统就是。
● 鸣学
zero_hsy
帖子: 37
注册时间: 2013-03-03 10:45
系统: ubuntu
送出感谢: 8 次
接收感谢: 0

Re: 求shell的源代码

#6

帖子 zero_hsy » 2013-03-13 15:23

基于楼上发的,我在百度上找了一下,找到了一个shell程序,大致上我都看懂了,但是我怎么让自己打开terminal直接运行这个程序,而不是linux中已经有的shell,求帮助啊!!!
头像
guyanqiu
帖子: 360
注册时间: 2009-05-05 23:42
送出感谢: 5 次
接收感谢: 10 次

Re: 求shell的源代码

#7

帖子 guyanqiu » 2013-03-13 16:22

zero_hsy 写了:基于楼上发的,我在百度上找了一下,找到了一个shell程序,大致上我都看懂了,但是我怎么让自己打开terminal直接运行这个程序,而不是linux中已经有的shell,求帮助啊!!!
这个不是编程问题,这个是修改系统的默认配置问题
一般在/etc/passwd
里修改,注意,你最好新建一个用户来折腾,这样出事了好解决。
-----------------------
在迷茫中追逐,在追逐中迷茫……
-----------------------
回复

回到 “老旧版本支持”