环境:Ubuntu 16.04
现象:
命令:grep -R --include=\*.{xml,properties} '10501' /data/docker/ |awk -F "[:]" '{print $1}' |xargs sed -i "s/10.56.69.167/$container_name/g"
在if else判断中执行报错“sed:没有文件输入”,控制台单独执行,放在case中可以执行,不报错。
1 #!/bin/bash 2 #手动输入端口号 3 read -p "请输入端口号:"port 4 #echo $port 5 #通过端口号获取容器名称 6 container_name=`docker ps |grep "$port" |awk -F "[ ]+" '{print $NF}'` 7 if [! $container_name];then 8 echo"端口号"$prot"对应容器不存在" 9 exit 10 else 11 echo $port"对应容器为:"$container_name 12 read -p "是否开始修改配置文件:y/n?" KEY 13 case $KEY in 14 y) 15 #批量修改java服务配置 16 grep -R --include=\*.{xml,properties} '10501' /data/docker/ |awk -F "[:]" '{print $1}' |xargs sed -i "s/10.56.69.167/$container_name/g" 17 grep -R --include=\*.{xml,properties} '10501' /data/docker/ 18 ;; 19 n) 20 echo "已退出修改" 21 ;; 22 *) 23 echo "请重新执行脚本" 24 exit 25 ;; 26 esac 27 fi
脚本执行时,以sh+脚本名,执行报错,以bash+脚本名执行正常
grep -R --include=\*.{xml,properties} '10501' /data/docker/ |awk -F "[:]" '{print $1}' 如果这段过滤出来没问题的话,应该是下面
xargs sed -i "s/10.56.69.167/$container_name/g" 有问题,xargs去掉
grep -R --include=\*.{xml,properties} '10501' /data/docker/ |awk -F "[:]" '{print $1}' | sed -i "s/10.56.69.167/$container_name/g"
xargs本身就是为sed -i 传递参数的,脚本以bash执行正常了