You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需预先保存文件,如何执行附加二进制数据的自解压Bash脚本?

无需预先保存文件,如何执行附加二进制数据的自解压Bash脚本?

我太懂这个困扰了!你之前用/bin/bash -c "$(curl -fsSL https://<omitted>/script.sh)"行不通,核心问题在于脚本里的tail -n+$ARCHIVE_START_LINE $0完全依赖$0指向包含完整二进制数据的脚本文件,但这种执行方式下$0要么是bash进程本身,要么只是个字符串参数,根本读不到末尾的归档数据。

给你两个更简洁的替代方案,都不用手动创建临时文件:

方案一:用进程替换(最推荐)

bash <(curl -fsSL https://<omitted>/script.sh)

bash的<(command)语法会把curl拉取到的完整内容(脚本+二进制)放到一个临时的文件描述符里(比如/dev/fd/123),然后bash会把这个描述符当作本地脚本文件来执行。此时$0就指向这个包含全部内容的“虚拟文件”,tail就能精准定位到后面的归档数据,完美复刻本地执行脚本的逻辑。

方案二:直接管道结合/dev/stdin

如果你的环境对进程替换支持有限(比如老版本bash),可以试试这个:

curl -fsSL https://<omitted>/script.sh | exec bash /dev/stdin

这里我们让bash直接从标准输入读取脚本内容,同时exec确保$0指向/dev/stdin——curl已经把完整的脚本+二进制数据输出到管道里,当执行到tail命令时,剩下的归档数据还在标准输入流里,tail就能顺利提取。

对比你原来的临时文件方案,这两种方式更简洁,也避免了手动清理临时文件的麻烦。

备注:内容来源于stack exchange,提问作者Edward Ruchevits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:58:02