如何在 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 -cpsql -c 都将一个 shell 词作为输入。单引号或双引号字符串是一个词。您需要嵌套引号,就像嵌套 -c 命令一样。

选择:

winpty docker exec -it postgres_db bash -c "psql -U postgres -c \"CREATE DATABASE test;\""