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

如何向cloud-init-per正确传递带短横线的命令参数?

解决cloud-init-per传递带短横线命令参数的问题

可行解决方案

使用sh -c将目标命令包装为shell命令字符串,彻底避免cloud-init-per误解析带短横线的参数:

bootcmd:
- [cloud-init-per, once, mkdir_samba, sh, -c, "mkdir -m 0755 -p /etc/samba"]

其中mkdir_samba是自定义的任务标识名称,可根据实际需求修改。

问题原因分析

  1. 直接传递参数的问题:cloud-init-per的脚本逻辑中,once后的第一个参数被视为任务名称,后续参数会被直接当作命令及参数传递,但它不支持--作为自身参数与命令参数的分隔符,导致-m、-p这类带短横线的参数被误判为cloud-init-per自身的参数,触发-m: not found错误。

  2. 添加---后报错的原因:此时---被当作了任务名称,后续的0755在传递过程中被解析为十进制数值,而mkdir的-m参数需要的是八进制模式字符串,十进制493对应八进制0755,因此出现mkdir: invalid mode ‘493’的错误。

替代方案(复杂场景适用)

如果需要执行的命令逻辑较复杂,可以编写独立shell脚本,通过cloud-init-per执行:

write_files:
- content: |
    #!/bin/sh
    mkdir -m 0755 -p /etc/samba
  path: /tmp/mkdir_samba.sh
  permissions: '0755'

bootcmd:
- [cloud-init-per, once, run_mkdir_script, /tmp/mkdir_samba.sh]

cloud-init会先创建脚本文件并赋予执行权限,再通过cloud-init-per执行,完全规避参数解析冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:22:38