当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求shell的源代码
帖子发表于 : 2013-03-12 21:49 

注册: 2013-03-03 10:45
帖子: 37
系统: ubuntu
送出感谢: 8
接收感谢: 0 次
大家好,我想知道shell的源代码是什么,用C如何写下来,但是没有找到,有哪为好心的人能给我发一份?谢谢!!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-12 21:52 
头像

注册: 2008-12-06 10:38
帖子: 4566
送出感谢: 23
接收感谢: 31
bash的:http://ftp.gnu.org/gnu/bash/



_________________
评价: 3.7% zero_hsy
 
页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-13 10:33 
头像

注册: 2008-08-13 8:48
帖子: 26391
地址: 东海硇州,一双管钥。
系统: Fundu i64
送出感谢: 50
接收感谢: 344
任何一个shell都不是小工程。 :em04


_________________
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关



_________________
评价: 3.7% zero_hsy
 
页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-13 10:50 
头像

注册: 2009-05-05 23:42
帖子: 360
送出感谢: 5
接收感谢: 10
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]
被下载 15 次


_________________
-----------------------
在迷茫中追逐,在追逐中迷茫……
-----------------------

_________________
评价: 3.7% zero_hsy
 
页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-13 11:10 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
不重复发明轮子。

用好系统就是。


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-13 15:23 

注册: 2013-03-03 10:45
帖子: 37
系统: ubuntu
送出感谢: 8
接收感谢: 0 次
基于楼上发的,我在百度上找了一下,找到了一个shell程序,大致上我都看懂了,但是我怎么让自己打开terminal直接运行这个程序,而不是linux中已经有的shell,求帮助啊!!!


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求shell的源代码
帖子发表于 : 2013-03-13 16:22 
头像

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


这个不是编程问题,这个是修改系统的默认配置问题
一般在/etc/passwd
里修改,注意,你最好新建一个用户来折腾,这样出事了好解决。


_________________
-----------------------
在迷茫中追逐,在追逐中迷茫……
-----------------------


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译