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

如何单命令实现从URL下载Shell脚本执行并传入管道数据

单条命令实现远程脚本下载、执行并传入管道输入

问题背景

  • 现有一个支持读取管道传入数据的Shell脚本,本地执行方式如下:
$ echo "Test Data" | do-stuff.sh
  • 脚本目前已迁移至远程地址http://example.com/do-stuff.sh
  • 尝试使用以下命令实现远程执行时,管道传入的数据无法被目标脚本读取:
$ echo "Test Data" | ( curl -sfL http://example.com/do-stuff.sh | sh )
  • 现有临时方案需要生成本地文件,流程如下,需要找到不落地本地文件的单行命令实现方案:
$ curl -sfL http://example.com/do-stuff.sh > do-stuff.sh
$ chmod +x do-stuff.sh
$ echo "Test Data" | do-stuff.sh
$ rm do-stuff.sh

失效原因

之前的写法不生效,核心是管道输入的消费规则问题:子shell中curl是第一个启动的进程,会默认抢占当前shell的标准输入流,等curl完成脚本下载、将脚本内容传递给sh执行时,管道里传入的Test Data已经被curl消费丢弃,目标脚本自然读不到输入内容。

可行方案

通过命令替换先拉取完整脚本内容作为sh的执行参数,预留标准输入流给脚本读取数据即可,单行命令如下:

echo "Test Data" | sh -c "$(curl -sfL http://example.com/do-stuff.sh)"

逻辑说明

  • $(curl -sfL http://example.com/do-stuff.sh) 会优先完成远程脚本的拉取,将完整脚本内容作为字符串参数传给sh -c执行
  • 整个命令的标准输入流不会被curl占用,会直接透传给运行脚本的sh进程,脚本可以正常读取管道传入的内容
  • 全程不会在本地生成实体脚本文件,符合需求

安全提示:直接执行远程来源的脚本存在安全风险,请务必确认脚本来源可信后再运行上述命令


内容的提问来源于stack exchange,提问作者rubenhak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:51:23