首页新闻找找看学习计划

【求助】shell脚本sed -i:没有输入文件

0
悬赏园豆:5 [待解决问题]

环境: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
随风听雨的主页 随风听雨 | 初学一级 | 园豆:199
提问于:2018-07-13 11:42
< >
分享
所有回答(2)
0

脚本执行时,以sh+脚本名,执行报错,以bash+脚本名执行正常

随风听雨 | 园豆:199 (初学一级) | 2018-07-13 14:26
0

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"

joker8 | 园豆:196 (初学一级) | 2018-07-15 11:42

xargs本身就是为sed -i 传递参数的,脚本以bash执行正常了

支持(0) 反对(0) 随风听雨 | 园豆:199 (初学一级) | 2018-07-16 09:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册