V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wuhuaji
V2EX  ›  分享创造

实现了一个简单的 shell: tinyshell

  •  
  •   wuhuaji · 2019-07-21 12:21:37 +08:00 · 2654 次点击
    这是一个创建于 1734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    截图

    最近三周业余时间实现了一个简单 shell。除了读取一个命令并执行外,还实现管道,重定向等 io 特性,history,cd等 bultin 命令。

    代码地址:https://github.com/WuHuaJi0/tinyshell

    总的来说还比较简陋,还有不少尚待实现的 feature。

    发到这里,主要是想:

    • 希望能获得一些建议,或者批评都欢迎,大家一起讨论一下。
    • 估计会对新手有些帮助。练习 Linux 系统或者练习 C 语言,实现一个 shell 是一个不错的想法,大佬们可能看不上,对新手估计能有些参考。
    • 嘿,求 star:)
    9 条回复    2019-07-24 14:36:44 +08:00
    LiuJiang
        1
    LiuJiang  
       2019-07-21 21:06:30 +08:00
    动不动就求 star,想多了。
    SpiderXiantang
        2
    SpiderXiantang  
       2019-07-21 21:38:24 +08:00
    我现在感觉写轮子就得写点有使用价值的
    SpiderXiantang
        3
    SpiderXiantang  
       2019-07-21 21:56:17 +08:00
    看到楼主的 github 就看到了自己的 github 加油 已经点赞了
    shuizhengqi
        4
    shuizhengqi  
       2019-07-22 09:49:29 +08:00
    bultin 是指 built in 吗?
    wuhuaji
        5
    wuhuaji  
    OP
       2019-07-22 09:52:25 +08:00
    @shuizhengqi 是的,笔误了,指的是 cd 等由 shell 自己实现的命令
    linyinma
        6
    linyinma  
       2019-07-24 09:34:05 +08:00
    想玩玩 CLI 建议看看《 unix 环境高级编程》--- 伪终端

    采用无名管道,只能呵呵~~
    wuhuaji
        7
    wuhuaji  
    OP
       2019-07-24 10:20:39 +08:00
    @linyinma 伪终端相关章节我还没深看,就无名管道想请问下,和有名管道在这里实现会有什么优劣么?
    linyinma
        8
    linyinma  
       2019-07-24 11:51:33 +08:00
    @wuhuaji 有名 /无名管道 区别在于使用场景吧,无名在于血缘关系的父子进程间通信,有名管道没有限制只要名字约定好,规定谁读谁写就可以了~~

    管道 Vs 终端 主要是缓冲和阻塞的问题~~
    wuhuaji
        9
    wuhuaji  
    OP
       2019-07-24 14:36:44 +08:00
    @linyinma 我这里也是考虑在 shell 中的进程都有血缘关系,用无名管道即可。

    你说的缓冲和阻塞问题,似乎我还没什么体会,能否举例说下什么情况下会碰到呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2555 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:18 · PVG 09:18 · LAX 18:18 · JFK 21:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.