研究了半天自己的脚本放在 watch 里跑在特别小的终端里会失败的问题。
之前已经发现,手动强制 ps 输出完整命令能绕过问题:
https://github.com/felixonmars/archlinux-futils/commit/08044d6abbe33844e1022d530e3fcf914f9decc4
今天再次想起这个问题,决定仔细研究一下。首先是发现了在是否使用 watch 的情况下结果不一样,然后在 @lilydjwg 的建议下上 strace 分析 ioctl 调用,发现调用和返回值都没什么区别。
最后回到读代码模式,找到了答案:watch 会设置 COLUMNS 环境变量,并且 ps 会认。
https://gitlab.com/procps-ng/procps/-/blob/master/src/watch.c#L409
https://gitlab.com/procps-ng/procps/-/blob/master/src/ps/global.c#L225
这个故事还有个后续:这里引入的 bwrap 需要 userns,而 qemu-user 似乎不支持,于是又自己坑到了自己的 riscv64 port…… https://github.com/felixonmars/archriscv-packages/commit/eb998dc75f9d35bc56c03656a008b72f6bfb594f
折腾了两个小时 pandoc 未安装时找不到自己的 data files,无法在 PKGBUILD 里生成 bash completion 的问题……从 openredir 不生效,gdb 断点停不住,coreutils 缺符号,glibc 的符号看不懂,一路折腾到百合仙子建议的 bwrap、unshare、overlayfs,最后先暂时用了这样奇丑的方案:
https://github.com/archlinux/svntogit-community/commit/e78b37d7034e06d09408b9c3bad10a284a225175#
现在我很坚定地觉得这应该是 devtools 处理的问题了……
在亚洲区连上一个把我卡得泪流满面的玩家,一看 IP 在巴基斯坦,从香港/新加坡过去的路由都是到了印度之后先去欧洲(法国)转一圈再回巴基斯坦……难怪这么卡 233
(可能他选欧洲区会比连亚洲区更顺……)
#Warframe
Arch Linux Developer, Learning Ruby, probably a fox.
和 Twitter 不同,这边会更新更多,内容更生活。