我知道这听起来很奇怪,但事情就是这样。我有一个 docker 容器,它托管一个数据库。而且我有一个脚本,它试图一个接一个地执行一组补丁。现在,脚本不知道数据库端口(因为每次容器绑定(bind)到不同的端口)。所以这里是脚本的开头:
#!bin/bash
echo "Calculating the port..."
port=$(docker-compose ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//")
echo "Port is $port"
基本上它应该对 docker-compose ps 的输出使用react,输出如下:
Name Command State Ports
wildfly_database-docker_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32768->3306/tcp
但是,事情就是这样。如果我的终端窗口很小,则此脚本不起作用,端口变量为空。如果我以全屏方式展开终端窗口,它可以正常工作,并且可以满足我的需要。我想这是因为第一种情况下的输出被分成几行,并且无法正确解析。
那么,如何让 bash 脚本独立于窗口大小工作呢?
更新 .由于评论,我找到了解决方案。这似乎是 docker-compose 的问题。但是在我把它改成这条线之后
port=$(docker ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//")
一切正常。 Docker 本身不受终端大小的影响。
最佳答案
由于评论,我找到了解决方案。这似乎是 docker-compose 的问题。但是在我把它改成这条线之后
port=$(docker ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//")
一切正常。 Docker 本身不受终端大小的影响。
关于bash - 为什么 bash 脚本的工作取决于终端窗口的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42526376/