码道 CLI 安装
码道 CLI 安装踩坑实录:5 个坑一次讲清
【摘要】在 Linux 本机和一台远程主机上安装华为云码道 CLI,从下载超时一路踩到目录信任、非交互 Shell 授权失效。这篇记录 5 个真实卡点和对应解法,附可直接复用的非交互调用命令。
一、缘起:我不想只在编辑器里跟它对话
我的用法有点偏门:白天在终端里写脚本,晚上让定时任务跑巡检。图形界面的对话框再顺手,也没法塞进 cron 里。
华为云码道 CLI 正好补上这块——它本身是 TUI 工具,codearts 一敲就进交互界面,但同时也留了非交互调用和 JSON 输出的口子。我决定把它装到本机和一台常年开着的远程主机上,先解决"能跑",再解决"能被脚本调"。
官方文档写得很干脆:Linux 一条命令装完。实际动手,五个坑排队等着。
二、一条命令装完,然后卡在授权
按官方文档,macOS 和 Linux 的安装方式一致:
sh -c "$(curl -L https://cnnorth4-cloudide-marketplace.obs.cn-north-4.myhuaweicloud.com/codearts/cli_tui/install_script/install.sh)" && export PATH=~/.codeartsdoer/installers:$PATH
装完回显版本号,说明二进制到位。我这边落在用户目录,验证一下:
~/.codeartsdoer/installers/bin/codearts --version
# 26.10.9
到这一步都很顺。真正的麻烦从"授权"开始:CLI 支持网页登录和 AK/SK 两种方式,网页登录只覆盖 TUI 模式,远程主机上没有浏览器,只能走 AK/SK。再加上"目录信任"这道门,坑就开始密集出现。
三、五个坑,按踩到的顺序
| 坑 | 现象 | 解法 |
|---|---|---|
| 下载超时中断 | Operation interrupted、exit code 130,/tmp 里留下 815KB 的半成品 |
改后台执行,避开工具调用超时;先测下载速度再判断是不是网络问题 |
| 下载出口不一致 | 安装脚本 111 秒只下了 1.4MB,独立测速却有 1.6MB/s | 给 curl 加 --noproxy '*' 直连,或手动下载压缩包再解压 |
| 目录未被信任 | 执行 codearts models 直接返回"文件夹未被信任" |
trustedFolders 要写在 security 的直接子级,不能埋进 folderTrust 里 |
| 远程授权不生效 | 非交互 ssh 下 codearts: command not found,配好的 AK/SK 读不到 |
.bashrc 开头有非交互判断提前 return,凭证改放 .bash_profile |
| 模型 ID 写法不对 | 指定 GLM-5.3 无法使用,默认模型还在排队 |
用 codearts models 列出的原始 ID,大小写和前缀照抄 |
坑 1:70MB 的包,被超时打断两次
第一次执行安装命令,终端突然显示 Operation interrupted,进程退出码 exit code 130。我一度以为链接失效,去 /tmp 一看,半成品压缩包只有 815KB——下载确实开始了,只是没跑完。
真凶是超时。安装包约 70MB,工具调用默认等几十秒到几分钟,网速一般时刚好卡在临界点。换成后台进程跑,不再占用调用窗口:
nohup bash -c "$(curl -L https://cnnorth4-cloudide-marketplace.obs.cn-north-4.myhuaweicloud.com/codearts/cli_tui/install_script/install.sh)" \
> /tmp/codearts-install.log 2>&1 &
后来我干脆绕开安装脚本:从脚本里找到压缩包地址,手动下载 tar.gz 再解压安装。好处是每一步都看得见——包多大、下了多久、解压出什么,全在手里。
坑 2:同一个网络,两个速度
这是最反直觉的一个。后台安装跑了 111 秒,进度只有 1.4MB;我另开一条 curl 测速,1.6MB/s,同样的目标文件,30 秒左右就该下完。
差异在出口。机器上配了 HTTP 代理环境变量,安装脚本里的 curl 继承了它,走了代理链路;独立测速那条命令显式绕开代理,速度立刻正常。加 --noproxy '*' 重跑,下载一次通过。
划重点:看到"下载慢",先别急着怪带宽,分开测一次"走默认出口"和"绕开代理出口"的速度,差异会直接指出问题在哪。
坑 3:字段位置错一层,信任永远不生效
装完之后执行 codearts models,命令被拒绝,提示与"文件夹未被信任"相关。翻配置发现 settings.json 里已经有 security.folderTrust,我把目录白名单也塞了进去:
{
"security": {
"folderTrust": {
"enabled": true,
"trustedFolders": ["/home/user/project"]
}
}
}
看着合理,实际无效。程序读的是 security.trustedFolders,也就是 security 的直接子级:
{
"security": {
"folderTrust": { "enabled": true },
"trustedFolders": ["/home/user/project"]
}
}
改完立刻生效,不用重启。匹配规则是路径前缀,把父目录写进去,子目录一起放行。这个细节文档里不一定写得这么细,最省时间的办法是直接在二进制里搜配置键名,或者改一次就验证一次。
坑 4:远程主机上,凭证"写了但没读到"
给远程主机装完,同样的 AK/SK 写进 .bashrc,非交互执行时却报 codearts: command not found,凭证也读不到。手动 source ~/.bashrc 依然没生效。
根因很朴素:.bashrc 第 6 行有一句 [ -z "$PS1" ] && return。非交互 shell 没有 PS1,脚本走到这里就直接返回,后面的 PATH 和凭证全被跳过。这也是为什么"登录上去敲命令是好的,ssh 远程执行就废了"。
两个改法,选一个:
# 改法一:凭证和 PATH 写进 .bash_profile(登录 shell 会读)
# 改法二:执行时显式加载
ssh host 'bash -lc "source ~/.bashrc; codearts models"'
我选了第一种,长期更省事。
坑 5:模型 ID 大小写敏感,默认模型还会排队
codearts models 能正常列模型之后,我随手指定 GLM-5.3,没能正常返回。列表里真实的写法是小写的 glm-5.3,部分条目还带 provider 前缀,比如 huaweicloud-maas/glm-5.3。ID 大小写、前缀都要照抄,别凭印象写。
还有个体验问题:不指定模型时,默认模型经常排队。要稳定跑脚本,显式 -m 指定一个空闲模型更靠谱。
四、把它变成能脚本调用的东西
交互模式直接敲 codearts 就进 TUI,日常自己用最舒服。但要做自动化,codearts run 才是入口,它支持 --format json,输出是逐行事件:
codearts run -m glm-5.3 --format json "读取 README 并总结成三句话"
每行一个 JSON 事件,文本在 type=text 的 part.text 里,step_finish 事件带 token 用量。解析起来不用猜格式,包装一层就能接进自己的脚本或定时任务。
有个细节要提前处理:目录信任是按目录生效的。包装脚本如果换工作目录,得先把目标目录加进 trustedFolders,否则又会撞上坑 3。我最初的包装脚本就是在这里翻车的。
另外,--auto 模式并不等于"什么都敢改"。实测让它改一段有风险的代码,模型自己拒绝了修改。这是模型侧的保护,不是参数没生效——真要批量改代码,还是把范围说清楚,别指望一个开关搞定所有事。
五、可直接复用的几条命令
# 1. 安装(网络正常时)
sh -c "$(curl -L https://cnnorth4-cloudide-marketplace.obs.cn-north-4.myhuaweicloud.com/codearts/cli_tui/install_script/install.sh)"
# 2. 授权(写进 .bash_profile 更稳)
export CODEARTS_CLI_AK="你的 AK"
export CODEARTS_CLI_SK="你的 SK"
# 3. 验证授权与模型列表
codearts models
# 4. 非交互调用
codearts run -m glm-5.3 --format json "你的任务"
权限和环境相关的几个建议:
- 装完先跑
codearts --version,版本号出来再谈授权,别把两件事混在一起排查。 - 授权失败先确认变量在当前 shell 里真的存在(
echo ${CODEARTS_CLI_AK:+set}),别只看配置文件。 - 远程执行统一用登录 shell 或显式
source,别假设.bashrc一定会被执行。 - 目录信任改一次验证一次,父目录生效就没必要逐个加子目录。
六、总结
- 安装失败先分清是哪一层:下载、解压、权限、授权。
exit code 130多半是超时,不是链接挂了。 - 速度异常先分出口测速,代理环境变量会让安装脚本和你的测试命令走不同链路。
- "配置写了不生效"优先怀疑位置和非交互 shell 的加载顺序,
security.trustedFolders和.bashrc的return都是典型。
END
- 点赞
- 收藏
- 关注作者
评论(0)