2024 年 macOS 上各家包管理器的现状

如果是 POSIX shell,确认 \builtin whence sudo 结果是 /usr/bin/sudo 或其它正常位置,\builtin whence -v 有一个 alias type,但要确保 type 也没被改了所以要用 \builtin 确保用的是正确的功能。

1 个赞

明白了,whence 是 zsh。

如果是 bash 的话就是 \builtin type sudo 或者 \builtin command -v sudo 对吧

没办法,Unix shell 的坑太多了,能允许用户覆盖掉 builtin 的命令。

话说你用的什么 shell?zsh 和 fish 能防住 bashrc,但如果是 profile 被修改了呢?:fearful:

我用 elvish,不执行 .profile

是的

1 个赞

疑似的现成案例来了: 通过 brew 安装 Scala 的 Coursier,会被安装到 ~/Library/Application Support/Coursier/bin(macOS),卸载掉了 formula 还会继续存在。(?)

之所以是「疑似」,是因为我之前用过 IDEA 的 Scala 插件,我得排除一下这个 Coursier 是谁安装的。

是这个么?好像是清华 TUNA 的成员开发的项目:https://elv.sh/


话说,还有什么 Shell 能避开 Unix Shell 的各种坑?

1 个赞

最近看到一个 Value 整的活(在脚本里随便用 rm -rf),没错是那个推出了 Proton 和 Steam Deck、为 Linux 游戏生态作出贡献的那个 Value。

这里其实会收到一个 cd: no such file or directory 的报错,但问题是已经开始删除 /* 了,其实来不及的,中断脚本也只能减少损失(尽可能避免个人文件被删),大概率重装系统是避免不了的。:sweat_smile:

Fish 还把精力放到 RIIW(Rewrite It In Rust)上了 :crab:

「战果」是现在在 Repo 里已经看不到 C/C++ 了。

截屏2024-03-10 14.44.45

最近还在用 brew,因为在用 emacs-plus。

不过我唯一用到的功能是 path injection,其实可以直接看 formula 学一下怎么改 plist。

Nix 在新一些的 macOS 上只能用 Multi-user installation 了吧?

这里 没有说 Single-user installation 的事情,而 Linux 的安装说明里明确列出了Single-user installation。

Installing a Binary Distribution - Nix Reference Manual

(你看下安装的脚本,改改就能单用户了

不过现在各程序语言都喜欢搞自己的 xxxup(例如 ghcup、rustup、rbenv 等),把程序安装在「不用 sudo 提升权限就能修改的路径」里面。 :sweat_smile:

不兼容bash就只能自己平时玩玩了,很难进生产环境啊。就像如果guile不能兼容elisp 的话emacs那么多插件谁跟它玩呢。

虽然好久没听到过guile的消息了

?? python, go, haskell 连 lisp 都不是都有人用它们开发 Emacs 插件,guile 有实现啥出名的功能么?

跑脚本有 dash 不就够了,又不是只能装一种 shell。另外 elvish 是用 go 静态链接的,直接复制上去就能跑。

1 个赞

安装一个 Go 开发的二进制程序很难么? :thinking:

自己电脑想怎么装怎么装啊。已有的生产环境不是以稳定为主么。

生产环境里一大堆集群是不是还要让部署的人升级呢?部署的人是不是还要调研这个的安全性和兼容性呢?如果不兼容已有的bash脚本是不是还要有人重写呢?重写了会不会有新的bug呢?

如果好处没有碾压正在用的shell就是很难进生产环境。因为shell的交互性一般不是管理集群的人最关心要素。当然如果生产环境上随便让人装东西,或者说完全从技术选型开始就选了fish那另当别论

举的例子里不就有锁版本的么?

那你们之前引入第三方库的时候不检查安全性么?

如果已经有一套生产环境,就算新出了一个号称能百分百兼容的工具也很难让一个公司替换掉现有的一套。这个难不是因为技术性困难,而难在你要搞定所有的“人”。

因为原先一套跑得好好的,没有非换不可的理由正常是不会换的(例如替换成本低于维护成本)。如果是破坏兼容性的就更加难引入了。