请考虑:
cd ~
cd $HOME
我想说,第一个命令是第二个命令的可能糖语法,而第二个命令则不太抽象。
只是为了向编程新手展示命令如何变得越来越不抽象(在解释什么是抽象的背景下),重点关注 shell,我问:
如何将非糖语法 shell (Bash) 命令转换为“较低”类型的代码,例如汇编代码甚至机器代码(或介于两者之间的任何代码,cd $HOME
例如其汇编表示形式)?
我可以使用什么软件(也许在 shell 中)来实现这一目标,以演示计算机命令如何从简单到复杂?
答案1
既然你提到了 Bash,那么翻译cd
成汇编语言可以如下完成:
git://git.savannah.gnu.org/bash.git
cd bash
./configure
make
cd builtins
./mkbuiltins -D . cd.def
gcc -S -DHAVE_CONFIG_H -DSHELL -I. -I.. -I.. -I../include -I../lib -I. -g -O2 -Wno-parentheses -Wno-format-security cd.c
然后您将在 中找到相应的汇编语言builtins/cd.s
。 (您需要安装许多开发工具;如何安装取决于您的发行版,并且./configure
会告诉您缺少什么。)
我怀疑这会非常有用,特别是对于编程新手来说。
答案2
要执行高级 shell 命令,您需要一个复杂的程序,即 shell。
任何汇编或机器代码都不会更改进程的当前目录,除非它是调用内核的指令序列。内核是比 shell 更复杂的软件,并且执行起来并不简单chdir
,还有文件系统抽象层。
一般来说,从汇编代码或机器代码中没有什么好处,特别是对于编程新手来说。