在日常开发与运维中,经常能看到类似这样的安装命令:

curl -fsSL https://example.com/install.sh | bash
其中的 -fsSL 似乎成了一个约定俗成的“标准组合”。但它到底是什么意思?每个字母背后隐藏着哪些设计考量?今天我们就来彻底搞懂 curl -fsSL。
一、curl 参数速览
| 参数 | 长格式 | 作用 |
|---|---|---|
-f | --fail | 服务器错误时静默失败,不输出错误页面内容 |
-s | --silent | 静默模式,不显示进度条或普通错误信息 |
-S | --show-error | 与 -s 搭配时,仍显示错误信息 |
-L | --location | 自动跟随 HTTP 重定向(301/302) |
下面逐个拆解。
二、-f(--fail):优雅地处理服务器错误
默认情况下,如果请求的 URL 返回 404、500 等 HTTP 错误状态码,curl 仍会将错误页面(比如 404 Not Found 的 HTML 内容)输出到标准输出。这在 curl | bash 场景下非常危险——如果脚本地址失效,bash 可能会执行下载下来的 404 错误页面。
加上 -f 后,curl 遇到 HTTP 错误时会直接退出并返回错误码 22,同时不输出任何响应内容。这样管道就不会把垃圾数据传给 bash。
# 不加 -f:错误页面被传给 bash(可能造成意外执行) curl https://example.com/404.sh | bash # 加 -f:curl 报错退出,bash 不会执行任何内容 curl -f https://example.com/404.sh | bash
三、-s(--silent)与 -S(--show-error):静默但不沉默
-s会隐藏进度条和大多数错误信息,让输出保持干净。- 但完全静默也有副作用:错误信息也被藏起来了,用户无法知道哪里出问题。
- 因此
-sS组合成为最佳实践:进度条不显示,但真正的错误信息依然会打印到 stderr。
# 只加 -s:遇到错误时没有任何输出,难以调试 curl -s https://invalid.url # 加 -sS:没有进度条,但错误信息会显示 curl -sS https://invalid.url # 输出:curl: (6) Could not resolve host: invalid.url
在 -fsSL 中,sS 就是这种“安静但关键错误不隐藏”的策略。
四、-L(--location):自动跟随重定向
许多资源实际存储在其他地址(例如 GitHub raw 内容会临时重定向到 raw.githubusercontent.com 的 CDN 地址)。默认情况下 curl 不会自动跳转,只会返回 30x 状态码和 Location 头。
-L 让 curl 像浏览器一样,自动请求重定向后的新地址。没有 -L,你拿到的基本是一个重定向提示,而不是真正的脚本内容。
# 不加 -L:输出 HTTP 重定向响应 curl https://raw.githubusercontent.com/xxx/install.sh # 加 -L:自动获取最终脚本内容 curl -L https://raw.githubusercontent.com/xxx/install.sh
五、组合起来:-fsSL 的完美适配
| 场景 | 参数作用 |
|---|---|
| 下载远程脚本 | -L 确保跟随重定向,拿到真实内容 |
| 错误处理 | -f 避免把错误页面喂给 bash |
| 界面干净 | -s 隐藏进度条,适合自动化脚本 |
| 可调试性 | -S 保留关键错误信息 |
所以 -fsSL 就是专门为 curl <url> | sh 这种模式量身打造的“安全下载 + 静默执行”参数组合。
六、安全性提醒:不要盲目执行远程脚本
虽然 -fsSL 解决了管道传输中的一些技术问题,但它无法解决脚本本身的安全风险。执行一个来自互联网的脚本相当于授予了其完整权限。
推荐做法:
- 先单独运行
curl -fsSL -O <url>下载脚本到本地; - 用
cat install.sh或编辑器审查内容; - 确认无误后再执行
bash install.sh。
或者使用更安全的 wget 配合校验和验证。
七、总结
-f:错误时不输出内容,避免污染管道-s:静默模式,不显示进度-S:与-s搭配,仍显示错误-L:跟随重定向
curl -fsSL 组合实现了:静默下载、自动跳转、错误即停、关键报错可见——这正是无数安装脚本选择它的原因。
解决方法:1、下载证书:https://curl.haxx.se/ca/cacert.pem如果无法访问可以通过百度网盘下载:https://pan.baidu.com/s/1c6gOT2l4_VM_...