如何在 shell 脚本中组合 exec 命令
How to combine exec commands in shell script
我 运行正在 docker 上使用 postgreSQL。
为了访问容器我运行
winpty docker exec -it postgres_db bash
现在我在 docker 容器内,我 运行 以用户 'postgres' 身份访问 postgres 服务器
psql -U postgres
那我要做的就是创建一个数据库
create database test;
我可以在脚本中按顺序执行此操作吗?
我想要这样的东西:
#!/bin/bash
winpty docker run -p 8005:5432 --name postgres_db -e POSTGRES_PASSWORD=password -d postgres
sleep 5
winpty docker exec -it postgres_db bash -c "psql -U postgres" [-c "create database test;"]
如果我不在“psql -U postgres”中,则无法执行创建数据库。很明显最后一行-c "create database test;"是错误的,只是为了让你明白我要做什么。
winpty docker exec -it postgres_db bash -c "psql -U postgres -c 'CREATE DATABASE test;'"
bash -c
和 psql -c
都将一个 shell 词作为输入。单引号或双引号字符串是一个词。您需要嵌套引号,就像嵌套 -c
命令一样。
选择:
winpty docker exec -it postgres_db bash -c "psql -U postgres -c \"CREATE DATABASE test;\""
我 运行正在 docker 上使用 postgreSQL。 为了访问容器我运行
winpty docker exec -it postgres_db bash
现在我在 docker 容器内,我 运行 以用户 'postgres' 身份访问 postgres 服务器
psql -U postgres
那我要做的就是创建一个数据库
create database test;
我可以在脚本中按顺序执行此操作吗? 我想要这样的东西:
#!/bin/bash
winpty docker run -p 8005:5432 --name postgres_db -e POSTGRES_PASSWORD=password -d postgres
sleep 5
winpty docker exec -it postgres_db bash -c "psql -U postgres" [-c "create database test;"]
如果我不在“psql -U postgres”中,则无法执行创建数据库。很明显最后一行-c "create database test;"是错误的,只是为了让你明白我要做什么。
winpty docker exec -it postgres_db bash -c "psql -U postgres -c 'CREATE DATABASE test;'"
bash -c
和 psql -c
都将一个 shell 词作为输入。单引号或双引号字符串是一个词。您需要嵌套引号,就像嵌套 -c
命令一样。
选择:
winpty docker exec -it postgres_db bash -c "psql -U postgres -c \"CREATE DATABASE test;\""