Shell换行导致ktctl参数解析失败?问题分析与正确写法

问题背景

最近在Shell中使用ktctl打通本地和k8s集群网络时发现执行成功了但是没有正常写入服务IP映射到hosts中,猜想一定是最近为了方便修改并查看命名空间把原本的单行命令改成了换行导致的,于是将命令改成单行后再次执行发现可以正常写入,查阅资料才发现换行其实存在一定问题。

原因分析

根本原因:Shell 的换行符截断

当在命令行中使用 ​反斜杠 \ 换行 时:

sudo ktctl connect \
--dnsMode hosts: \ 
          agent, \
          base

实际传递给 ktctl 的参数会被解析为:

--dnsMode "hosts: " "agent," "base"

而不是期望的:
 

--dnsMode "hosts:agent,base"

也就是说Shell 会将换行后的参数视为独立的新参数​(即使加了 \ 换行符),而如果参数要求是连续的字符串(如--dnsMode),这样就导致没办法解析为--dnsMode的参数,所以执行后没有正常写入hosts。

解决方案

因此尽量不要将一个option后的参数(这里指--dnsMode后的所有命名空间参数)拆分换行,一个参数作为一个整体写为一行,可以将各个option进行换行而不拆分参数。
规范写法:
 

sudo ktctl connect \
--dnsMode hosts:agent,base,default,manage,merch,message,mpos,openapi,posp,setting,test,trans,utils \
--shareShadow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值