Posted on 

Solved - zsh command not found (macOS)

因为需要制作个人网站和文档,我电脑中需要安装 node.js(包含 npm)和 git。

顺利安装后,运行如下指令,使用 npm 安装 hexo 和 docsify 都没有问题,十分顺利。

1
2
npm install hexo-cli -g
npm i docsify-cli -g

遇到问题

但是,在安装完成后,准备开始使用 hexo 和 docsify 的时候,所有相关指令都无法使用,终端会给出如下错误。(请注意我使用的是 macOS 系统)

1
2
3
4
5
6
7
# 假如我运行 docsify 相关指令
docsify init
zsh command not found:docsify

# 假如我运行 hexo 相关指令
hexo s
zsh command not found:hexo

我在网上查了好久,但那是相关的解决措施都很「高级」……作为一个编程小白,我真的很茫然,完全看不懂。

所幸在一番折腾后,我终于解决了这个问题。接下来我将解决方案和过程分享给你,希望能发挥效果。

理解Terminal、Shell

首先,我们需要理解zsh是什么,以及有什么用。(没错,我连这个都不知道是什么!)

zsh全名为Z-shell,本质即是Shell。听起来很复杂,别着急,请继续看。

我们日常在使用电脑的时候,比如聊微信、打游戏、看网页,实际上是通过开发者设计好的用户界面(User Interface, UI)在与电脑交互,是一种间接沟通方式,但胜在图文并举、直观易懂。

但如果我们想要更直接地与电脑交互,我们便需要另一个工具,这便是终端(Terminal)。终端可以直接与计算机的内核(Kernel)沟通,是一种直接沟通方式,但往往需要具备一定的计算机知识,否则看到纯文字的界面会很茫然。

终端想要与计算机沟通时,不能直接与内核沟通,否则一旦用户错误操作,整个计算机就会崩溃。因此,我们还需要一个中介,用来接受用户输入的命令,并由其与内核沟通,这便是Shell(壳层)。

Shell有很多种,比如bash、csh、tcsh等,你会发现它们都以shell的缩写「sh」结尾。

因此,前述终端中报错,实际上是zsh在告诉我们:「虽然你用npm安装了相关程序,但是我找不到呀,你得告诉我文件路径在哪里哦!」

解决问题

既然理解了问题,那我们就可以着手开始解决问题。

首先,我们需要找到zsh的配置文件,在终端中输入以下指令应该能打开:

1
open ~/.zshrc

如果终端反馈找不到该文件,或者有错,请你使用Finder打开用户文件夹(我的文件夹为joeysimac),并按下command+shift+.,显示隐藏文件夹。如果你不知道你的用户文件夹路径是多少,请重启终端并输入以下指令,终端会告诉你当前路径。

1
2
3
pwd
# 我的程序返回了如下指令
/Users/joeysimac

打开文件后,应该会有一行大致如下的文字:

1
export PATH=$HOME/bin:/usr/local/bin:$PATH

其中以:断开的便是不同的/bin路径,请记住这几个不同的路径,接下来可能会用到。

因为 macOS 从 Catalina 版开始,其默认 shell 从 bash 改为 zsh。因此,你需要找到# User configuration,在其下方加入一行代码,告知zsh「之前bash的相关配置你可以用哦」。最终效果如下:

1
2
# User configuration
source ~/.bash_profile

其次,我们需要知道刚刚通过npm全局安装好的程序(以hexo为例),它现在具体在什么地方。

因为我是使用npm安装的,所以通常而言,安装好的程序应该会在/Users/joeysimac/.npm-global/bin这个文件夹中。

因此,我们需要将hexo现在的位置/Users/joeysimac/.npm-global/bin/hexo告诉zsh。请将下列路径替换为你自己的路径,然后在终端中输入。

1
2
sudo ln -s 你的程序路径 /bin路径
# 示例:sudo ln -s /Users/joeysimac/.npm-global/bin/hexo /usr/local/bin

如果发生错误,请尝试将/bin路径更换为前述的其他路径。

最后,为了使配置文件立刻生效,我们需要在终端中输入:

1
source ~/.zshrc

到此为止,你可以试着重启终端,试着运行相关程序。依旧以hexo为例,逐行敲入下列代码,看看终端是否能正常运行。

1
2
3
hexo init blog
cd blog
hexo s

复盘

这是我第一次撰写技术向文章,因为我本身并非计算机专业,也未系统学习过编程,单纯只是感兴趣,算是纯小白了。无论学习哪种语言,学习编程的道路都不会一帆风顺。

遇到问题卡壳了,那就尝试转换心情去完成别的任务吧,很多难题往往在散步的过程中灵感迸发就解决了,或者睡一觉之后脑子就想通了。

从积极的角度而言,遇到问题说明我们有了收获新知识的可能性,这难道不可喜可贺吗!


参考文献:


本站由 @deskside 使用 Stellar 主题创建。
This site is created with love by @deskside , powered by Hexo theme Stellar.
本博客所有文章除特别声明外,均采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。
All articles, unless otherwise stated, are in CC BY-NC-SA 4.0 license agreement. Please indicate the source when reproduced.
由于中国大陆网络政策的限制,部分图片可能无法顺利显示。
Due to the restrictions of Chinese mainland’s network policy, some pictures may not be displayed smoothly.