gpt4 book ai didi

bash - 这个脚本中的 "${psql[@]}"是什么意思?

转载 作者:行者123 更新时间:2023-12-02 14:48:03 25 4
gpt4 key购买 nike

我遇到了一个 script它应该在 docker 容器中设置 postgis,但它在几个地方引用了这个 "${psql[@]}" 命令:

#!/bin/sh

# Perform all actions as $POSTGRES_USER
export PGUSER="$POSTGRES_USER"
# Create the 'template_postgis' template db
"${psql[@]}" <<- 'EOSQL'
CREATE DATABASE template_postgis;
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis';
EOSQL

我猜它应该使用 psql 命令,但该命令始终为空,因此会出错。将其替换为 psql 可使脚本按预期运行。我的猜测是否正确?

编辑:以防万一,该命令正在基于 postgres:11-alpine 的容器中运行。

最佳答案

$psql 应该是一个包含 psql 命令及其参数的数组。

脚本显然预计将从 here 开始运行, 这确实

psql=( psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --no-password )

然后在此循环中获取脚本:

        for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh)
# https://github.com/docker-library/postgres/issues/450#issuecomment-393167936
# https://github.com/docker-library/postgres/pull/452
if [ -x "$f" ]; then
echo "$0: running $f"
"$f"
else
echo "$0: sourcing $f"
. "$f"
fi
;;
*.sql) echo "$0: running $f"; "${psql[@]}" -f "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done

参见 Setting an argument with bash出于使用数组而不是字符串的原因。

关于bash - 这个脚本中的 "${psql[@]}"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57665146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com