你执行的命令是:
sudo bash <(curl -sL kejilion.sh)
报错信息为:
bash: /dev/fd/63: No such file or directory
这个错误在某些系统(尤其是部分云服务器、容器环境或较简化的 Debian 系统)中很常见,我们来 深入分析原因并提供可靠解决方案。
🔍 问题分析
什么叫 <(...)?
这是 Bash 的 进程替换(Process Substitution) 功能,它会创建一个类似 /dev/fd/63 的虚拟文件描述符,把 curl 输出的内容当作“文件”传给 bash。
然而:
· 某些系统默认使用 dash 而非 bash,而 dash 不支持 <(...)
· 即使在 bash 中,某些环境下(如受限 shell、chroot、最小化系统)文件描述符未正确传递
· 使用 sudo 可能导致环境上下文变化,子 shell 无法访问父 shell 创建的 fd
👉 所以你在用 sudo bash <(...) 时,<(curl ...) 是由当前用户的 shell 展开的,但 sudo 启动的新 shell 无法访问那个临时的 /dev/fd/XX 文件 —— 导致“文件不存在”
✅ 推荐解决方案
✅ 方法一:【推荐】分步下载 + 执行脚本
避免使用进程替换,更安全、可审计、适用于所有环境。
# 1. 下载脚本到本地
curl -sSL https://kejilion.sh -o kejilion.sh
# 2. 查看内容(安全起见!非常重要)
cat kejilion.sh
# 👉 确保没有 rm -rf、格式化磁盘、上传数据等恶意操作再继续!
# 3. 给予执行权限并运行(带 sudo)
chmod +x kejilion.sh
sudo bash kejilion.sh
✅ 优点: - 安全可控 - 避免 fd 问题 - 易于调试和重复执行
✅ 方法二:通过管道方式直接执行(仍需小心)
如果你坚持在线执行不落地,可以这样写:
curl -sSL https://kejilion.sh | sudo bash
⚠️ 注意: - 必须是 | sudo bash,不能是 sudo curl | bash(权限错乱) - 这种方式无法审查内容,风险较高,仅建议用于可信来源
❌ 不推荐的方式(你现在遇到问题的原因)
sudo bash <(curl -sL kejilion.sh) # 错误!sudo 里看不到 /dev/fd/xx
这就是你的原始命令的问题所在:父 shell 生成的 fd 不被 sudo 子进程继承
💡 补充技巧:判断当前是否使用 bash
有些系统默认 sh 是 dash,不支持高级特性。确认一下:
echo $SHELL
ls -l /bin/sh
如果输出指向 /bin/dash,就不支持 <()
你可以强制使用 bash:
bash -c 'sudo bash <(curl -sL kejilion.sh)' # 依然不好,不推荐
不如直接换方法一。
✅ 最终总结
✔ 正确做法(任选其一):
推荐 ✅ 安全又稳定
curl -sSL https://kejilion.sh -o kejilion.sh
cat kejilion.sh # 先审阅!
sudo bash kejilion.sh
快速但有风险 ⚠️
curl -sSL https://kejilion.sh | sudo bash