Closed festoney8 closed 6 months ago
感谢反馈!
已将 jq 命令修改以解决此问题, 并发布在 2.8b1.
From: (jq -n 'env|to_entries[]|{(.key): (.value|(if . == "true" then true elif . == "false" then false else (tonumber? // .) end))}' | jq -s add)
To: (jq -n 'env|to_entries[]|{(.key): (if ((.key|ascii_downcase) == "blocklist") then [] elif ((.key|ascii_downcase) != "qbusername" and ((.key|ascii_downcase) != "qbpassword")) then (.value|tonumber?) // .value else (.value) end)}' | jq -s add)
% export QbuSERNAME=13728328
% export qBPassworD=24828429
% export bLOCKlIST=i8uesjjr
% export number1=1
% (jq -n 'env|to_entries[]|{(.key): (if ((.key|ascii_downcase) == "blocklist") then [] elif ((.key|ascii_downcase) != "qbusername" and ((.key|ascii_downcase) != "qbpassword")) then ((.value|tonumber?) // .value) else (.value) end)}' | jq -s add)
{
"QbuSERNAME": "13728328",
"qBPassworD": "24828429",
"bLOCKlIST": [],
"number1": 1,
}
好好好,明天我发个PR把docker的blocklist解决一下
比起修改程序, 有一种更简便的方法: 客户端于 Docker 使用的是 CMD 命令, 这意味着你可以通过自定义输入命令来取消从环境变量转换的行为, 并将本机或远端的配置文件挂入容器.
另外, 若要提交 PR, 由于 Docker 是属于一种兼容 (而非推荐) 的运行模式, 因此原则上来说是在尽可能不要对程序主体做大的改动的情况下完成目标 (或独立出一个模块/文件去完成不同的平台兼容). 这种特殊模式的解析与否可以通过修改 Flag 去实现, 如 --env 或 --docker, 同时对 Dockerfile 进行改动.
毕竟, 在环境变量传达数组这个想法, 用 jq 确实是太难实现/太复杂烧脑了.
版本:2.7
经查,原因为根据环境变量生成 config.json 时
tonumber
将QBUsername
或QBPassword
转换成数字导致https://github.com/Simple-Tracker/qBittorrent-ClientBlocker/blob/c50e04fcdf4c11dd2c81fd9cffea52cd1f9a8683/Dockerfile#L21
复现: