曾国藩:一勤天下无难事

K8S的pod内获取变量的值错误

2019.02.26

问题

今天遇到一个问题,就是用shell脚本从k8s的pod内获取变量,然后再进行赋值或字符拼接时,结果发现总是不对,但是通过自定义的变量没有问题 以下为问题复现:

[root@cloud-cn-master-1 ~]# cc=`kubectl exec -it -n nginx-system nginx-df4b995c5-98w66 -c nginx-01 env | grep SYS_ADMIN_USERNAME | awk -F"=" '{print $2}'`
[root@cloud-cn-master-1 ~]# echo $cc
sysadmin
[root@cloud-cn-master-1 ~]# echo $cc"abcde"
:abcdein
[root@cloud-cn-master-1 ~]#
[root@cloud-cn-master-1 ~]# dd=test
[root@cloud-cn-master-1 ~]# echo $dd
test
[root@cloud-cn-master-1 ~]# echo $dd":abcde"
test:abcde
[root@cloud-cn-master-1 ~]#

经过反复排查,结果发现取出的值的文件编码为doc,通过vim 文件即可发现:

[root@cloud-cn-master-1 ~]# kubectl exec -it -n nginx-system nginx-df4b995c5-98w66 -c nginx-01 env | grep SYS_ADMIN_USERNAME | awk -F"=" '{print $2}'>cc.txt
[root@cloud-cn-master-1 ~]# vim cc.txt

pod

解决方法

使用字符转换命令(dos2unix)对此文件进行转换即可:

[root@cloud-cn-master-1 ~]# dos2unix  cc.txt
dos2unix: converting file cc.txt to Unix format ...
[root@cloud-cn-master-1 ~]# cc=`cat cc.txt`
[root@cloud-cn-master-1 ~]# echo $cc":abcde"
sysadmin:abcde
[root@cloud-cn-master-1 ~]#