bash - Docker 终端中的 Docker 行数在 docker 内部发生变化

标签 bash docker terminal tput

我想知道如何更改以下行为。假设我的终端有 28 行。然后我使用以下命令:

$ tput lines # my terminal
28
$ docker run  --rm  -it ubuntu:16.04 tput lines  # docker container
24  ## WHY??
$ docker run  --rm  -it ubuntu:16.04 bash # docker container inside command
root@810effa2777c:/# tput lines
28

如您所见,即使所有结果都应为 28,当我将容器调用为 docker run --rm -it ubuntu:16.04 tput lines 尽管我的终端大小,它总是给我 24。这不仅适用于 ubuntu 容器,我还尝试了 debian (docker run --rm -it debian tput lines),我得到了相同的结果 24。

这样做的目的是使用 mdp presentation tool这考虑了终端中的线路。当我的实现失败时,我尝试了其他人的 docker implementation但我遇到了同样的错误。

这是我在图像中的错误:

Docker number of lines in terminal changing inside docker

有谁知道它可能是什么以及如何解决这个问题?

最佳答案

更新

您现在可以安装 goinside 命令行工具:

sudo npm install -g goinside

然后进入具有适当终端大小的 docker 容器:

goinside docker_container_name

goinside 背后的逻辑

感谢 @VonC answer我们用一个简单的 bash 片段解决了这个问题,我们把它放在 ~/.profile 中:

goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside

现在您可以进入 docker 容器,而不会出现终端大小问题:

$ goinside 容器名称


在使用 goinside 函数之前

记住 source ~/.profile


在 bash 中启用自动完成

(因为它在下面的评论之一中共享)如果你想为 goinside 启用自动完成,你可以在 .profile 中使用这个片段:

goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
_goinside(){
    COMPREPLY=( $(docker ps --format "{{.Names}}" -f name=$2) );
}
complete -F _goinside goinside;
export -f goinside;

在 zsh 中启用自动完成

如果您使用 zsh 作为默认终端,则可以在 ~/.zshrc 文件中使用此代码段:

autoload bashcompinit
bashcompinit
goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
_goinside(){
    COMPREPLY=( $(docker ps --format "{{.Names}}" -f name=$2) );
}
complete -F _goinside goinside;
export goinside;

关于bash - Docker 终端中的 Docker 行数在 docker 内部发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786615/

相关文章:

javascript - 意外删除了 node_modules 文件夹

linux - 查找文件并以特定格式显示结果到txt文件

linux - 获取 Shell 中管道命令的退出状态

docker - 在 Windows 上的 docker 命令中找不到输入文件

dart - 在 dart 中读取文件并拆分字符串在控制台中的结果与在 vscode 中的结果不同

c - 如何使用 c 中的路径更改 xeyes 的颜色?

将 Apple 标签(Mavericks 标签)导出到 IPTC "Keywords"元数据的 Bash 脚本(使用 'Tag' 和 'ExifTool')

bash - 获取 shell 脚本目录的父目录

docker - 使用docker在其他端口上运行Vue.js App

docker - jenkins在运行新容器时使用旧数据