Administrator
发布于 2026-01-14 / 4 阅读
0
0

文章测试二

你执行的命令是:

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

有些系统默认 shdash,不支持高级特性。确认一下:


echo $SHELL
ls -l /bin/sh

如果输出指向 /bin/dash,就不支持 <()

你可以强制使用 bash:


bash -c 'sudo bash <(curl -sL kejilion.sh)'   # 依然不好,不推荐

不如直接换方法一。


最终总结

问题

原因

No such file or directory /dev/fd/63

sudo 无法访问当前 shell 创建的进程替换 fd

正确做法(任选其一):

推荐 安全又稳定


curl -sSL https://kejilion.sh -o kejilion.sh
cat kejilion.sh           # 先审阅!
sudo bash kejilion.sh

快速但有风险


curl -sSL https://kejilion.sh | sudo bash


评论