(pin)*nix shell pingramming⬇️
今天学shell script技巧的时候,发现有人提到zsh可以用Unix域套接字代替命名管道实现主程序和子进程间的管道通信(全双工),之前没见书里这么做过感觉会很好用就赶紧试了下,发现每次监听端close()之后想复用现有的套接字文件都必须先删除旧文件才行……就……感觉有病……
很好奇为什么这么有病,查了资料发觉Linux上的AF_UNIX出于api一致性考量不允许重新复用磁盘上现有的空套接字文件。于是每次建ipc通道之前都要在vfs层面做文件写入的操作……要是运行环境没有tmpfs的话想要用这个方法做ipc就必须得像Solaris那样在/dev里写浪费磁盘空间的不知有什么〇用的东西了……感觉写*nix shell麻烦一堆,而且不知道什么时候就没法用了,下次再看到往家目录里写socket文件的破软件(基本上都是兼容bsd的那种)可以骂上一句了。
*nix shell中的首尾接合管道: https://unix.stackexchange.com/questions/296432/shell-mutual-piping-of-stdin-stdout-of-two-commands/296434#296434AF_UNIX类socket复用: https://gavv.net/articles/unix-socket-reuse/跟标准抠字眼: https://stackoverflow.com/questions/15716302/so-reuseaddr-and-af-unix吐糟: https://www.mail-archive.com/tech-kern@netbsd.org/msg01670.htmlhttps://www.mail-archive.com/tech-kern@netbsd.org/msg01672.html
pty更难用历史包袱更多更慢……破shell真的没法写什么复杂的东西https://stackoverflow.com/questions/39018496/unix-way-to-create-bi-directional-pipes-or-anything-which-acts-like-that
什么叫金针度人……oilshell的wiki和文档就是个shell编程模式设计(『全新版本』)的大宝藏!!
https://github.com/oilshell/oil/wiki
🥳cs麻瓜感觉更有动力去看相关的理论了,这种带实现(重点是持续维护可用的项目)连设计思路和实现过程一块讲的感觉真的很棒👍🏻
每个人都有属于自己的一片森林,也许我们从来不曾走过,但它一直在那里,总会在那里。迷失的人迷失了,相逢的人会再相逢。愿这里,成为属于你的小森林。
今天学shell script技巧的时候,发现有人提到zsh可以用Unix域套接字代替命名管道实现主程序和子进程间的管道通信(全双工),之前没见书里这么做过感觉会很好用就赶紧试了下,发现每次监听端close()之后想复用现有的套接字文件都必须先删除旧文件才行……就……感觉有病……
很好奇为什么这么有病,查了资料发觉Linux上的AF_UNIX出于api一致性考量不允许重新复用磁盘上现有的空套接字文件。于是每次建ipc通道之前都要在vfs层面做文件写入的操作……要是运行环境没有tmpfs的话想要用这个方法做ipc就必须得像Solaris那样在/dev里写浪费磁盘空间的不知有什么〇用的东西了……感觉写*nix shell麻烦一堆,而且不知道什么时候就没法用了,下次再看到往家目录里写socket文件的破软件(基本上都是兼容bsd的那种)可以骂上一句了。
*nix shell中的首尾接合管道: https://unix.stackexchange.com/questions/296432/shell-mutual-piping-of-stdin-stdout-of-two-commands/296434#296434
AF_UNIX类socket复用: https://gavv.net/articles/unix-socket-reuse/
跟标准抠字眼: https://stackoverflow.com/questions/15716302/so-reuseaddr-and-af-unix
吐糟: https://www.mail-archive.com/tech-kern@netbsd.org/msg01670.html
https://www.mail-archive.com/tech-kern@netbsd.org/msg01672.html