web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
我想有一个bash脚本用bash脚本替换nginx
参数。
./script apache
将替换nginx
apache
答案 0 :(得分:11)
您可以使用:sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
示例运行:
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
web:
image: apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
要将更改保留到文件中,您可以使用就地选项,如下所示:
$ sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: apache/' file
如果你想在脚本中使用它,你可以将sed
命令放在脚本中并用$1
替换它来执行它。
$ vim script.sh
$ cat script.sh
sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: '"$1"'/' file
$ chmod 755 script.sh
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ ./script.sh apache
$ cat file
web:
image: apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$
答案 1 :(得分:5)
<强>脚本:强>
#!/bin/bash
sed -i.bak "s/\bnginx\b/$1/g" file
# \b matches for word boundary
# -i changes the file in-place
# -i.bak produces a backup with .bak extension
现在,您可以使用 apache 执行./script apache
替换 nginx 。
答案 2 :(得分:1)
因为这显然是一个docker-compose文件,你可能想尝试
image: ${webserver_image}
然后设置:
webserver_image=[nginx | apache]
发布之前。我相信这应该给你一个很好的插值。
答案 3 :(得分:1)
您可以按如下方式创建script.sh:
#!/bin/bash
# $1 image value you want to replace
# $2 is the file you want to edit
sed -i "" "/^\([[:space:]]*image: \).*/s//\1$1/" $2
然后运行: ./script.sh apache filename.yaml