解决:autojump_chpwd:4: command not found: autojump
电脑信息
苹果电脑:Mac mini M2
操作系统:macOS Sequoia 15.2
问题背景
在root用户下安装oh-my-zsh的autojump插件,将autojump插件放入到了/var/root/.oh-my-zsh/plugins目录下后,root用户在使用cd命令切换时,总会出现autojump_chpwd:4: command not found: autojump的错误信息
解决方法:
1、先去github上下载autojump软件包,地址:https://github.com/wting/autojump/tags
,个人下载的是当前最新的版本:autojump-release-v22.5.3.tar.gz
,是Source code(tar.gz)的版本
2、下载完成后,进行解压,进入解压后的目录,会有一个install.py
的文件,执行命令python3 install.py
,执行完成后即可
3、执行完成之后,autojump_chpwd:4: command not found: autojump
的错误信息消失,会出现新的错误信息:env: python: No such file or directory
4、这是由于环境变量中并没有python
这个环境变量,只有python3
或者是python3.x
的环境变量,此时尝试使用创建软连接的方式,执行命令
sudo ln -s /usr/bin/python3 /usr/bin/python
即使使用sudo
进行提权利,也无法执行成功,错误信息如下
ln: /usr/bin/python: Operation not permitted
显示无权限创建软链接
5、无权限在系统中创建软链接,是因为苹果在2015年的OS X 10.11
中引入了SIP
(全称:System Integrity Protection,译为系统完整性保护)
6、关闭SIP
首先需要在系统设置的安全与隐私中,将FileVault
关闭掉
然后重启电脑,执行命令command+R
(Intel芯片),如果是M系芯片则一直按着开机键盘,直到屏幕上出现苹果的标志和进度条,进入 Recovery 模式;个人使用的Mac Mini是M2芯片,以下就以M2芯片进行演示
选择进入options
选择你的用户,点击next
,并输入你的电脑密码
点击左上角的Utilties并点击打开Terminal
执行以下命令关闭并查看csrutil
csrutil authenticated-root disable # 关闭authenticated-root
csrutil disable # 关闭csruitl
# 查看状态是否是disable
csrutil authenticated-root status
csrutil status
#上述命令执行完成之后,然后重启即可
reboot
7、重启后,再次执行命令,创建软连接
sudo ln -s /usr/bin/python3 /usr/bin/python
# 出现新的错误,依旧无法创建
ln: /usr/bin/python: Read-only file system
在网上翻阅的资料,和各位资深网友的经验,苹果电脑的系统文件是无法更改,即使使用root也无法进行操作,这应该是苹果为了保护系统做的防御机制(个人猜测)
8、既然依旧无法创建软连接,而最初的提示是env: python: No such file or directory
,是环境变量中没有python
导致,那么在.zshrc
文件的末尾增加一个python
的别名,alias python=python3
并source .zshrc
,发现问题依旧无法解决
9、既然无法解决,而环境变量中又只有python3,那么既然系统中安装了python,那么必然会有python这个文件,只是没有加入到环境变量中而已,那么就找到python的安装目录在哪里,并吧python加入到环境变量中即可。使用root用户执行查找命令find / -name python
根据打印出来的信息,个人电脑上python所在的位置是/System/Volumes/Data/opt/homebrew/Cellar/python@3.13/3.13.0_1/libexec/bin/python
然后将该bin目录添加到环境变量中,在.zshrc
文件中,增加一行
export PATH="/System/Volumes/Data/opt/homebrew/Cellar/python@3.13/3.13.0_1/libexec/bin:$PATH"
然后source .zshrc
,再次使用root用户进行目录的切换,此时错误提示信息消失,大功告成
等等,刚才关闭的SIP还没有重新启动呢
10、关机重启,重新进入电脑的recovery
模式,打开terminal,执行以下命令
# 打开csrutil
csrutil authenticated-root enable
csrutil enable
# 检查状态是否是enable
csrutil authenticated-root status
csrutil status
# 重启
reboot
重启后,记得在设置的安全与隐私中,将FileVault
打开即可。
END
欢迎关注个人公众号:Mr.Liu的生活启示录
不定期发布,没事闲谈