diff options
author | 2024-06-07 02:10:42 +0800 | |
---|---|---|
committer | 2024-06-07 02:17:00 +0800 | |
commit | 1b5748544f06d8bbcab8f1b12ac9ea65a53f154e (patch) | |
tree | 3e77511f57baa2be77bbfc0891ca8e3a8e389e49 | |
parent | 71767cfd2bfd952fd94ac140d7d8c38a24bd1d6a (diff) | |
download | bcsh-1b5748544f06d8bbcab8f1b12ac9ea65a53f154e.tar.gz bcsh-1b5748544f06d8bbcab8f1b12ac9ea65a53f154e.zip |
Write README.md && ohoshell.shv0.1
ohoshell.sh is used to compile bcsh for Linux kernel of OpenHarmony
-rw-r--r-- | README.md | 36 | ||||
-rw-r--r-- | ohoshell.sh | 42 |
2 files changed, 78 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..d75af6d --- /dev/null +++ b/README.md | |||
@@ -0,0 +1,36 @@ | |||
1 | [toc] | ||
2 | |||
3 | # 我与 shell | ||
4 | |||
5 | 我是个喜欢用 Linux 命令行的人,**喜欢用命令行来完成一切工作,喜欢这种自己独掌系统一切的感觉**,仿佛自己是这台电脑的创世神~~,虽然现实中我只是废柴一个~~。对于每个学习 Linux 的人来说,bash 绝对是一座绕不过去的山,即使已有了 zsh、fish shell 等更加现代化、更加友好的工具,bash 由于其普适性和强大的功能,依然是大多数生产环境的首选。 | ||
6 | |||
7 | 但我在学 bash 时遇到了不小的困难,我发现 bash 的语法规定过于奇怪繁杂,完全不像其他编程语言,甚至就连 if 和括号之间都要求必须插入空格,第一次学的时候我在这里犯错,还找了好久。相比之下,我更喜欢 C 语言的语法(也许是我计算机入门学的就是 C 的缘故吧),多简洁明了啊! | ||
8 | |||
9 | # bcsh 由来 | ||
10 | |||
11 | 在学习 Linux-0.12 的过程中,我第一次了解到,**原来 shell 和我们自己编写的其他程序一样,是一个独立于操作系统之外的用户态程序**,因而是可以替换的、甚至是可以自己编写的。本来这件事遥遥无期,也许一辈子都不会去做,但我偏偏遇到了网络信息技术大赛,看到了开源鸿蒙 Terminal 应用开发这条赛道。嗯……shell 开发怎么不算 Terminal 应用开发呢?(笑。)于是一个计划生根发芽。 | ||
12 | |||
13 | 我的计划是这样的:**我要自己编写一个 shell,这个 shell 要能够完全替代 bash,而且要比 bash 更加简洁易用**。这个 shell 的名字就叫 bcsh,意为“Better C Shell”。我希望通过这个 shell 的开发,能够更加深入地了解 shell 的工作原理,同时也能够提高自己的编程能力。 | ||
14 | |||
15 | 我的设计初衷是,在基本命令与功能上,尽可能地贴近 bash,以免影响我自己的使用习惯;同时,在 case、if、循环等语法上,向 C 语言靠拢,让初学者(主要是我自己)更容易上手。当然,我也会在这个过程中,尽可能地保持代码的简洁性和可读性。因而我为它取了"bcsh"这个名字: | ||
16 | |||
17 | - bcsh 看起来像 bash,也可以解释为"Better C shell",贴合了既类似 bash、语法又像 C 的设计初衷 | ||
18 | - "Better Chen shell",希望在自己动手的过程中能有所成长 | ||
19 | |||
20 | 经过几天的设计,我发现编写 shell 并不是件简单的事情,就连普通功能向 bash 靠近都很有难度,bash 对于重定向、设置环境变量、读取配置文件、路径模糊匹配等的支持令人叹为观止;我仅仅是实现了基础的命令解析运行,就已经耗费了不少心力。但,**权且保留 bcsh 这个名字吧,梦想还是要有的,万一实现了呢?** | ||
21 | |||
22 | # 功能清单 | ||
23 | |||
24 | ## Done | ||
25 | |||
26 | - 最基本命令的解析与执行 | ||
27 | - 管道和重定向、与、或等逻辑的支持 | ||
28 | - 命令行提示信息:用户名、主机名、当前路径、终端提示符 | ||
29 | |||
30 | ## TODO list | ||
31 | |||
32 | - Ctrl+C、Ctrl+D、Ctrl+Z 等信号的处理 | ||
33 | - 复杂语法的支持:if、case、循环等 | ||
34 | - 设置与显示环境变量 | ||
35 | - 命令历史记录 | ||
36 | - 读取配置文件、运行脚本等 | ||
diff --git a/ohoshell.sh b/ohoshell.sh new file mode 100644 index 0000000..341b5ad --- /dev/null +++ b/ohoshell.sh | |||
@@ -0,0 +1,42 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | ########################################################################## | ||
4 | # File Name : ohoshell.sh | ||
5 | # Encoding : utf-8 | ||
6 | # Author : We-unite | ||
7 | # Email : weunite1848@gmail.com | ||
8 | # Created Time : 2024-06-07 02:05:05 | ||
9 | ########################################################################## | ||
10 | |||
11 | set -e | ||
12 | native=~/app/native | ||
13 | |||
14 | if [ $# -ne 1 ]; then | ||
15 | echo "Usage: $0 <armv7-a | armv8-a>" | ||
16 | exit 1 | ||
17 | fi | ||
18 | |||
19 | arch=$1 | ||
20 | |||
21 | case $arch in | ||
22 | armv8-a) | ||
23 | compiler=$native/llvm/bin/aarch64-unknown-linux-ohos-clang | ||
24 | targetPlatform=aarch64-linux-ohos | ||
25 | ;; | ||
26 | armv7-a) | ||
27 | compiler=$native/llvm/bin/armv7-unknown-linux-ohos-clang | ||
28 | targetPlatform=arm-linux-ohos | ||
29 | ;; | ||
30 | *) | ||
31 | echo "Unsupported arch" | ||
32 | exit 1 | ||
33 | ;; | ||
34 | esac | ||
35 | |||
36 | flex -o lex.yy.c lex.l | ||
37 | bison -o syntax.tab.c -d -v syntax.y -Wcounterexamples | ||
38 | |||
39 | $compiler -o bcsh bcsh.c syntax.tab.c -Wall \ | ||
40 | --target=$targetPlatform \ | ||
41 | --sysroot=$native/sysroot \ | ||
42 | -march=$arch -mfloat-abi=softfp \ No newline at end of file | ||