spring - 用于在 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
解决方案
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 行中检查的内容 - 无论使用which
或command -v
. 如何安装psql
命令取决于您的操作系统。
推荐阅读
- php - SQL 从 2 个不同的数据库中检索数据
- function - 如何正确设置衰减学习率回调,并在 xgboost 中将其传递给自定义函数?
- asterisk - 如何限制 Asterisk PJSIP 中的重新注册次数?
- docker - Docker:通过 .ENV 文件访问 JSON 文件
- java - 如何在 Google Drive 中创建一个文件夹并将文件发送到该文件夹而无需用户交互
- html - HTML 在列的最后一行显示项目
- c# - 将阿拉伯日期格式转换为英语:System.FormatException:'字符串未被识别为有效的日期时间。'
- javascript - 如何在 React Native 中的 StyleSheet.create 中继承样式(可能使用解构语法)
- ios - 如何修复 Xcode 的代码缩进错误?
- asp.net-core - 具有 .NetCore 3.0 不记名令牌授权的 SwaggerUI