etcdctl执行put命令后JSON引号被截断的问题求助
解决etcdctl写入JSON时引号丢失的问题
核心原因
问题出在shell命令行的转义解析:外层用双引号包裹时,内部的\"会被shell优先解析为普通引号,若转义逻辑有误,最终传递给etcdctl的内容会丢失引号。只需跳过复杂转义,让shell原样保留JSON内部的引号即可解决。
可行解决方案
1. 用单引号包裹完整JSON
shell中,单引号内部的所有字符会被原样保留,不会被转义或解析,这是最直接的方法:
etcdctl put /var/dir '{"key1": "value1", "key2": "value2"}'
执行后用etcdctl get /var/dir查询,就能看到完整带引号的JSON内容。
2. 使用Here-Doc传递内容
如果JSON内容较长或需要换行,用Here-Doc更清晰,注意EOF前后的单引号,确保shell不解析内部内容:
etcdctl put /var/dir << 'EOF' {"key1": "value1", "key2": "value2"} EOF
3. 从文件读取JSON内容
把JSON写入单独文件(比如config.json),再通过重定向让etcdctl读取文件内容:
# 先写入文件 echo '{"key1": "value1", "key2": "value2"}' > config.json # 再写入etcd etcdctl put /var/dir < config.json
这种方式适合复杂JSON结构,彻底避免命令行转义的麻烦。
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

