kubectl向容器内Shell脚本传参异常:仅首个参数生效如何解决
解决kubectl exec传递多个参数时仅第一个参数生效的问题
你的问题出在嵌套引号的解析冲突上:外层ssh命令用双引号包裹整个远程执行内容,内层bash -c又使用双引号,导致shell提前截断了参数。当shell读到bash -c "/my_script.sh --${version}后的双引号时,会判定外层ssh的命令参数已结束,后续--${remote_ip}等部分被当作独立的ssh参数,而非bash -c要执行的命令内容,因此只有第一个参数被传递给脚本。
修复方法有两种:
方法1:用单引号包裹bash -c的命令内容
外层双引号内的单引号会被当作普通字符,既能让bash -c的整个命令作为完整参数传递,也不影响本地变量的解析:
sshpass -p password ssh ubunt@${slave_ip} "kubectl exec -it pod_name -c container_name -- bash -c '/my_script.sh --${version} --${remote_ip} --${password} --${range} --${env}'"
方法2:转义内层的双引号
给bash -c后面的双引号添加反斜杠转义,避免提前闭合外层双引号:
sshpass -p password ssh ubunt@${slave_ip} "kubectl exec -it pod_name -c container_name -- bash -c \"/my_script.sh --${version} --${remote_ip} --${password} --${range} --${env}\""
额外提示
如果变量包含空格或特殊字符,建议先用printf "%q" "$var"对变量转义,避免多层shell解析时出现意外问题。
内容的提问来源于stack exchange,提问作者Goku
相关产品推荐
相关产品推荐

