linux - 在 docker 容器内运行的 bash 文件中没有这样的文件或目录 sed 命令

标签 linux bash postgresql shell sed

我正在尝试在 Ubuntu docker 容器中运行一个 bash 文件,我正在尝试修改 Postgresql 的两个文件,postgresql.conf 和 pg_hba.conf,这是我正在尝试运行的 bash 文件:

   sed -i -e"s/^#listen_addresses.*$/listen_addresses = '*'/" 
   /var/lib/postgresql/data/postgresql.conf
   echo "host    all    all    0.0.0.0/0    md5" >> 
   /var/lib/postgresql/data/pg_hba.conf
   /etc/init.d/postgresql restart

这是我尝试运行它的方式:

   root@fe4fcebedad6: ./db.sh

db.sh 是 bash 文件的名称,文件 postgresql.conf 位于我正在使用的路径/var/lib/postgresql/data/但我收到此消息:

: No such file or directorystgresql/data/postgresql.conf

奇怪的是,如果在 bash 文件之外运行每一个命令,它就可以正常工作,如下所示:

root@fe4fcebedad6:/# sed -i -e"s/^#listen_addresses.*$/listen_addresses = '*'/" /var/lib/postgresql/data/postgresql.conf

这是 docker-compose 文件中我将本地 bash 文件复制到 postgrest 镜像中的部分

      volumes:
       - pgdata:/var/lib/postgresql/data
       - ./shell_scripts:/shell_scripts

volumes:
    pgdata:

最佳答案

这是一个问题,因为您的命令中有多行。应该像下面这样

sed -i -e"s/^#listen_addresses.*$/listen_addresses = '*'/" /var/lib/postgresql/data/postgresql.conf

echo "host    all    all    0.0.0.0/0    md5" >> /var/lib/postgresql/data/pg_hba.conf

/etc/init.d/postgresql restart

关于linux - 在 docker 容器内运行的 bash 文件中没有这样的文件或目录 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45451267/

相关文章:

python - 使用 python 验证 apache 状态的脚本

c - 为什么这段代码可以获取到环境变量地址呢?

linux - Linux shell 脚本中的运行时代码生成

linux - 检查文件系统百分比并使用 case 命令运行脚本

postgresql - osm2pgrouting - 解析数据格式不正确(无效 token )

c++ - 如何将 gstreamer 1.0 视频元素添加到 qt5 应用程序

c - 在用户定义的telnet服务器中如何获取客户端提供的telnet选项

bash - plink 不会返回到命令提示符

postgresql - 将 PostgreSQL 条件转换为 mongoDB

c - 为什么我的 PostgreSQL C 函数会崩溃?