运行SQL时,Bash中的`<< - EOSQL`代码块是什么?

mod*_*tos 10 postgresql bash environment-variables docker

我需要执行一个包含SQL的bash脚本,所以我使用脚本将自定义配置添加到Postgres Docker容器中,根据这里的文档:

https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image

但我不知道是什么EOSQL意思.以下是从上述文档中获取的脚本示例:

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
    CREATE EXTENSION $MY_EXTENSION;
EOSQL
Run Code Online (Sandbox Code Playgroud)

那么,什么是EOSQL?我似乎无法找到有关此命令或关键字的更多信息.

Mat*_*att 15

EOSQLBash Here Document块的限制字符串.限制字符串可以是块中未显示的任何文本.它表示文本块的开头和结尾.

变量替换在这里的文档中正常工作:

#!/usr/bin/env bash
cat <<-EOF
$MY_EXTENSION
EOF
Run Code Online (Sandbox Code Playgroud)

然后使用变量set运行它:

$ MY_EXTENSION=something ./test.sh
something
Run Code Online (Sandbox Code Playgroud)

在Docker中,您需要ENV MY_EXTENSION=something在您Dockerfiledocker run -e MY_EXTENSION=something <image>您的命令行中设置环境.