相关背景我在安装solanacli工具的时候,查看了官方文档,我本机的环境是macos,可以使用shell脚本进行安装,这里学习下安装脚本的语法规则
我在安装 solana cli 工具的时候,查看了官方文档,我本机的环境是 macos,可以使用 shell 脚本进行安装,这里学习下安装脚本的语法规则:
sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"
sh -c
:
sh
是 shell 解释器-c
参数表示执行后面字符串中的命令"$(...)"
:
$()
会先执行括号内的命令,并将其输出作为外层命令的参数curl -sSfL https://release.anza.xyz/stable/install
:
curl
是下载工具-s
= silent(静默模式,不显示进度条)-S
= show-error(出错时显示错误信息)-f
= fail(HTTP错误时失败退出)-L
= location(跟随重定向)curl
命令从 URL 下载安装脚本内容sh -c
执行这种模式在开源软件安装中很常见,比如 Homebrew、Node.js、Docker 等都采用类似的安装方式。从 URL 来看,这应该是 Anza(Solana 相关工具)的安装脚本。
echo 'export PATH="/Users/louis.chu/.local/share/solana/install/active_release/bin:$PATH"' >> ~/.zshrc
我完全理解您的担心!让我详细解释这个命令,帮您消除恐惧感。
echo
命令echo "hello"
会在屏幕上显示 hello
$PATH
被立即展开$PATH
会被替换成当前路径值,这不是我们想要的export PATH="..."
这是环境变量的核心语法:
PATH
环境变量echo $PATH
查看export
命令"新路径:$PATH"
/Users/louis.chu/.local/share/solana/install/active_release/bin:$PATH
/Users/louis.chu/.local/share/solana/install/active_release/bin
:
:路径分隔符$PATH
:原来的所有路径>>
重定向符号>
:覆盖文件内容(危险!)>>
:追加到文件末尾(安全)~/.zshrc
~
:您的用户主目录 /Users/louis.chu
.zshrc
:zsh 配置文件(每次启动 zsh 都会读取):$PATH
保留了所有原来的路径想象 PATH 就像一个书架列表:
书架A:书架B:书架C
新书架:书架A:书架B:书架C
PATH 就像系统的"通讯录" ,告诉系统去哪里找可执行程序。
当您在终端输入 solana
时,系统需要知道:
solana
这个程序在哪里?让我演示一下:
which solana
/Users/louis.chu/.local/share/solana/install/active_release/bin/solana
看!solana
实际上是一个位于很深目录里的文件。
当您输入 solana
时,系统会:
/Users/louis.chu/.local/share/solana/install/active_release/bin
找 solana
如果找到了!执行这个/Users/louis.chu/.gvm/pkgsets/go1.24.0/global/bin
找PATH 就像外卖 App 的商家列表:
路径类型 | 示例 | 用途 |
---|---|---|
系统程序 | /usr/bin , /bin |
macOS 自带程序 (ls, cp, mv) |
用户安装 | /usr/local/bin |
Homebrew 等安装的程序 |
个人工具 | ~/.local/share/solana/.../bin |
个人安装的工具 |
开发环境 | ~/.nvm/.../bin |
Node.js 环境 |
Go 环境 | ~/.gvm/.../bin |
Go 语言环境 |
您的担心很有道理!但实际上系统的查找效率比您想象的要高很多。让我解释一下为什么:
上面提到了,查找命令的时候,是每个文件目录去搜索,找不到就开始寻找下一个,这种其实效率并不高,在系统层面还有缓存机制来解决这个问题
让我们运行一个命令,然后查看缓存:
solana --version > /dev/null && hash
solana=/Users/louis.chu/.local/share/solana/install/active_release/bin/solana
系统已经记住了 solana
的位置。下次再输入 solana
时,直接从缓存读取,无需重新查找。
实际查找过程,第一次运行 solana
:
后续运行 solana
:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!