我用了 6 年 UNIX,以下评论都是我的一手感受:
其一,UNIX 命令行的效率其实非常高而且十分灵活,不过学习难度大。UNIX 命令行本身就是一门解释型程序语言,除了要记命令行参数,要把命令行用活的话还需要学习 Shell 语言,有些时候还会涉及到 AWK、Make 等几种辅助语言。但是一旦把这几点学会,UNIX 命令行的效率就凸显出来了。举个例子:
#!/bin/bash
cat << EOF
/* This file is auto-generated using the IRQN tool. Do not modify. */
#ifndef IRQN_HANDLER
#include $1
#else
EOF
LIST="$(cat | egrep "_IRQn *=" | sed -E "s/^ ([A-Za-z0-9_]*)_IRQn *= ([0-9\\-]*).*$/\2 \1/" | sort -n)"
COUNT=$(echo "$LIST" | tail -n1 | cut -d " " -f1)
for idx in $(seq -14 $COUNT); do
LINE="$(echo "$LIST" | egrep -- "^$idx ")"
if [ "$LINE" != "" ]; then
echo $LINE | sed -E "s/([0-9\-]*) (.*)/IRQN_HANDLER(\1, \2)/"
else
echo SKIP_HANDLER\($idx\)
fi
done
cat << EOF
#endif
EOF
上面这个文件就是用 UNIX 命令行从 STM32 设备头文件里面提取中断向量信息,生成中断向量表文件的脚本。另外,UNIX 命令行是设计在串口上用的,资源消耗非常小,而且结合 PTY 之后可以很容易的通过网络传输,因此在服务器上非常常用。
Linux 的桌面环境其实统一度还是比较高的。不同的发行版虽然有不同的外观设计,其高级编程接口基本就两套:KDE/Qt 或 GNOME/Gtk+(别的编程接口,譬如 Tcl/Tk、Mono 或 Java 间接或直接的汇总到这两者上了。当然也有少部分非常陈旧的软件用了 X11 直接操作。)而且近两年各主要发行版也在逐渐统一到基于 Wayland 的单一接口上。(Wayland 基本就是抄的 iOS 图形系统层架构,Linux 各子系统架构设计上这两年没少抄苹果。)如果下一层到非图形接口那直接就是 glibc 实现的标准 POSIX,不仅各发行版之间早已统一,Linux 整体和 BSD、macOS 等其他 UNIX 都是统一的。至于你说的产品完整度,我不知道你指的是哪方面不完整了。 |