为了自动化写了很多脚本,却总是边用边丢,所以我写了一个脚本管理工具 https://juejin.cn/post/7369211590363430923

196 天前
 easychen
因为经常做一些自动化的工作,所以我会写一些脚本,不管是用无头浏览器去获取一些网站的内容,还是利用 apple script 将 Keynote 转为视频。这些年陆陆续续的算下来手上的脚本已经有几十上百个。

但是它们散落在代码库的各个地方,每次用的时候都很难找到。更麻烦的是各个脚本之间使用的语言接口都不一样。有时候想把它们串起来用,还需要进行重写。

所以我想要不我就干脆写一个工具把这些脚本统一管理起来... → https://juejin.cn/post/7369211590363430923
6056 次点击
所在节点    分享创造
47 条回复
kuanat
193 天前
一开始看帖子没看明白是做什么用的,看了手册才反应过来这是做了一套类似 IPC 的规范,外加一个注册中心。

有一点我觉得 OP 做得非常好,schema 自动生成。但是就如 #5 @w568w 所说的,这套规范化的做法是和写脚本这个行为的初衷天然互斥的,一个追求复用,一个追求敏捷。而且楼主在文章里也说,为了这个工具重写了大量脚本,着实有一种为了这碟醋包了一顿饺子的意味。

正好借这个帖子我想探讨一下 IPC 和工作流的话题,不知楼主是否了解过 dmenu ?



鉴于很多人可能从来没有听说过 dmenu ,我就简单介绍一下。它原本是为 dwm 窗口管理器设计的动态菜单( dynamic menu )应用,常常用作 Linux 环境的启动器。

和其他所谓效率工具最大的不同在于,dmenu 的哲学是它仅仅只负责从 stdin 读取输入生成菜单,然后向 stdout 输出用户的选择。整个过程的交互全部是纯文本。如果有必要上一个 dmenu 的输出也可以作为下一个 dmenu 的输入。

我个人认为 dmenu 设计思想的优秀之处在于:将写脚本和写工作流恰当地分离开,写脚本依然是那个能跑就行的随手工作,当需要将脚本集成进工作流的时候,适配所需的代价非常小,关键是并不需要刻意改动脚本。



单纯这样说可能依旧看不出 dmenu 设计思路的巧妙之处,我举几个例子说明。

比如我希望命令行将 wifi 切换至手机热点。需要准备两个脚本,一个是调用 nmcli 扫描当前可用网络,然后字符串处理一下生成 wifi 列表;另一个是从命令行读入一个字符串,调用 nmcli 连接该字符串所代表的 wifi 网络。

这个过程里 dmenu 的作用是,调用第一个脚本得到输出结果,以列表的形式供用户选择,并将用户的选择输出,传递给第二个脚本使用。写成命令行就是 `script1 | dmenu | script2`,通过管道的形式传递。

从这个例子可以看出,两个脚本本身就是实现功能用的,原本怎么写就怎么写,不需要预先考虑去适配某种输出。即便是别人写的脚本,只要它是文本输出,完全可以套一层 wrapper 使用 awk/sed 等工具转换成需要的输出。脚本不支持命令行输入,也可以使用 xargs 等方式将 stdin 转换为命令行参数。

至于工作流,无非就是扩展之前的命令行 `script1 | dmenu | script2 | xargs ... script3 | dmenu | script4` 这样,在有需要用户输入或者选择的地方加入 dmenu 即可。更进一步的话,将脚本都放在 ~/.local/bin 然后设计一个“入口”工作流,让用户首先选择所需要调用的脚本,那就变成了万能入口的效率工具了。



我不记得是什么时候接触到 dmenu 了,15 年应该是有了,现在我早已不用 dmenu ,但是依旧在用基于 dmenu 思路的替代品。写这个回复的时候突然想起了很早之前比较流行的一篇文章《开发人员为何应该使用 Mac OS X 兼 OS X 小史》,链接在 https://blog.youxu.info/2010/02/28/why-mac-os-x-for-programmers/

从时代的发展来看,即便是 macOS 这么理想化的 IPC 设计(图形化界面基于 Mach 的 Service 服务概念),依旧是推广不开的。抛开技术层面统一 runtime 不靠谱这一点,更重要的应该是人性,想要别人主动去适配实在过于困难。

万能入口、启动器这种工具的生态其实挺有意思的:Linux 用户似乎从来不关心,估计是都有自己手搓的方案; Windows/macOS 平台上的实现几乎看不到基于 dmenu 思想的实现,虽然可以解释为这些工具面向的都是没有编程能力的群体,那适配脚本的工作就显得更加难以实现了。
easychen
192 天前
@kuanat

我重写脚本有一个非常大的原因,就是把它们作为 LLM tools ,正是因此,规范才贯穿始终。

在设计上,可以把目光往后看,以后这些脚本可能不是人来写,所以规范和敏捷可能不是冲突的。

事实上,目前借助 Custom GPT ,已经可以编写简单的 FXD 脚本,我预期在 GPT5 时,应该可以直接编写 50%以上的日常脚本,剩下 50%只需要简单修改即可使用。

而通用脚本的适配,其实也不是问题,同样交给 AI 去做就好了。

只需要等待智能逐步提升,到达临界点,甚至很多软件的竞争壁垒都会消解,比如你可以用 AI 重写 wordpress 的 6 万个插件,让一个新兴项目拥有以往十年积累才能有的生态。

时代要变了,我们尝试面向下一个时代设计。当然,不一定成功就是了。
MrSheng
192 天前
@easychen #32

本人认为此贴是 [引流] 行为,请 OP 正面给出以下两个问题的答案:

( 1 )请 OP 先解释下要达到什么标准才符合 [不停] 、 [一个一个] 的规则
( 2 )请 OP 给出 [引流] 的定义,并且说明此贴不属于 [引流] 的范畴
0o0O0o0O0o
192 天前
easychen
191 天前
@kuanat

我把 FXD 的代码生成加上了 https://github.com/easychen/fxd/blob/master/README.zh-cn.md#fxd-app-%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90

现在用 gpt-4o 还比较弱智,但可以省下不少功夫,作为编程起点已经很方便。等之后模型能力提升了,应该能做更多事情。
kuanat
191 天前
@easychen #45

我之前的思路局限在脚本和工作流都是人在写之上,如果把视野展开,让 AI 来做胶水类型的工作(这本来也是语言模型的强项),现在就具备可用性了。

我也有尝试用 AI 来辅助生成功能性脚本,目前遇到的主要问题是没有很好的验证机制,很多时候需要人参与代码审计。另外目前基于提示词的运作方式接近于声明式编程,生成代码的实现方式比较不可控,更增加了人工判断的成本。
273601727
190 天前
@kuanat 现在的 AI 能节约很多繁杂编程的时间,试想一下:你读大学所有的理科书籍后面的习题例题,全都交给 GPT 生成 python 代码,用来求解与可视化,真的不可想象以前巨大的工作量(我也参与编写过一部本科教材),现在只需要人工审核一下即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041444

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX