首页 > 解决方案 > 用于在 Linux 上运行 postgres docker 映像失败的 Bash 脚本

问题描述

intellij 说,下面脚本第 4 行的命令which似乎有问题

这是非标准的。改用内置的'command -v'

由于which psql似乎它不起作用,它会自动影响第 12 行和第 13 行。

在调查时我删除了第 4 行,然后脚本执行了第 6 到 10 行,它成功创建了一个 docker 文件(pg-docker),但是我还需要执行schema.sql(第 12 行)和data.sql(13)。是否有命令的替代命令which(第 4 行)

下面是我的 bash 脚本:

#!/usr/bin/env bash
set -euo pipefail

which psql > /dev/null || (echo "Please ensure that postgres client is in your PATH" && exit 1)

mkdir -p $HOME/docker/volumes/postgres
rm -rf $HOME/docker/volumes/postgres/data

docker run --rm --name pg-docker -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=dev -d -p 432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql postgres
sleep 3
export PGPASSWORD=postgres
psql -U postgres -d dev -h localhost -f schema.sql
psql -U postgres -d dev -h localhost -f data.sql

我得到以下关于 Intellij 问题的信息

在此处输入图像描述

第 4 行抱怨哪个命令
行 6,7 和 9 抱怨 $HOME
第 11 行抱怨 PGPASSWORD

标签: springbashspring-bootdockerdockerfile

解决方案


which用于查找和显示命令的完整路径(在您的脚本中,它仅用于确保命令psql存在)。IntelliJ 或可能更好的为 (bash) 脚本定义的 linter 建议不要依赖单独的which命令,而只需使用内置的 bash 函数command -v,因此第 4 行将读取

command -v psql > /dev/null || (echo "Please ensure that postgres client is in your PATH" && exit 1)

也就是说 - 这很可能不是你真正的问题。您需要安装 PostgreSQL 客户端psql并在您的 PATH 变量中运行第 12 行和第 13 行中的命令。这正是您在第 4 行中检查的内容 - 无论使用whichcommand -v. 如何安装psql命令取决于您的操作系统。


推荐阅读