【问题标题】:Bash script for running postgres docker image failing on linux用于在 Linux 上运行 postgres docker 映像失败的 Bash 脚本
【发布时间】:2021-01-11 16:19:45
【问题描述】:

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

【问题讨论】:

  • 下次粘贴脚本时,请确保它有点可读性,并且每行后不包含不需要的字符,例如 12   <br>

标签: spring bash spring-boot docker dockerfile


【解决方案1】:

which 用于查找和显示命令的完整路径(在您的脚本中,它仅用于确保命令 psql 存在)。 IntelliJ 或可能更好的为 (bash) 脚本定义的 linter 建议不要依赖单独的 whichcommand,而只需使用内置的 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 命令取决于您的操作系统。

【讨论】:

  • 谢谢我安装了 postgres 并且它工作正常。已经坐了一段时间了,我不会继续学习......快乐编码
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 2019-05-28
  • 2018-06-19
  • 1970-01-01
  • 2017-03-05
  • 2020-02-07
  • 2013-01-14
  • 2019-07-01
相关资源
最近更新 更多