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

如何向bash -c执行的curl下载的shell脚本传递参数

远程Shell脚本参数传递方案

推荐的两种正确写法

  • 方案1(最稳妥,优先选择):使用-s参数让bash从标准输入读取脚本内容

    curl -fsSL https://storage.googleapis.com/<Some_bucket>/rules.sh | /bin/bash -s param1 param2
    

    该写法下,-s参数指定bash从管道传递的标准输入流读取脚本代码,后续的param1、param2会直接对应脚本内的$1、$2位置参数,不会出现语法拼接问题。

  • 方案2:遵循bash -c的原生参数规则编写

    /bin/bash -c "$(curl -fsSL https://storage.googleapis.com/<Some_bucket>/rules.sh)" bash param1 param2
    

    bash -c的语法规则为:bash -c <要执行的命令字符串> <$0占位值> <$1参数> <$2参数> ...,命令字符串后的第一个参数会被赋值给脚本的$0(通常用于标识脚本名,直接填bash占位即可),后续参数才会对应脚本的$1、$2。


原有写法失效的原因

  • 第一种写法/bin/bash -c "$(curl -fsSL https://storage.googleapis.com/<Some_bucket>/rules.sh)" param1 param2:
    缺少$0占位项,param1会被系统识别为$0,param2会被识别为$1,和你预期的参数对应关系完全不符,因此无法正常生效。
  • 第二种写法/bin/bash -c "$(curl -fsSL https://storage.googleapis.com/<Some_bucket>/rules.sh) param1 param2":
    相当于把参数直接拼接在下载到的脚本代码末尾,如果脚本内容末尾存在换行、特殊符号等,会直接触发语法错误,甚至会把参数当做独立命令执行,属于不符合语法规范的错误写法。

内容的提问来源于stack exchange,提问作者Anurag Kumar Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:45:02