bash - 为什么 bash 脚本的工作取决于终端窗口的大小?

标签 bash docker

我知道这听起来很奇怪,但事情就是这样。我有一个 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/

相关文章:

linux - 哪个命令找不到可执行的Unix脚本

bash - grep 数字范围

bash - 将 "-I"标志添加到 bash 中的路径字符串

docker - 无法从 Ubuntu Bionic 18.04 服务器安装 docker 版本 17.03.2?

windows - Docker:如何在容器启动时执行批处理文件并将用户保持在 cmd/session 中

linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数

bash - 在 bash 中捕获来自 "docker stop"的信号

docker - 为什么 docker build 标志 --add-host 在 linux ubuntu 上不起作用?

java - VisualGC 到在 docker 中运行的远程 JVM

docker - Dockerfile 中无法识别主符号 `~`