在 while 循环中执行 运行 docker 命令时出现“输入设备不是 TTY”错误

Get `the input device is not a TTY` error when run docker command inside a while loop

我有以下 bash 脚本。它 运行 docker run 命令在 while 循环中逐行读取文本文件。

#!/bin/sh -eu

while IFS= read -r url; do
    docker run --rm -it alpine ls
done < repo_list.txt

执行上述脚本时出现此错误 the input device is not a TTY。但是,如果我像这样删除 while loop 就可以正常工作:

#!/bin/sh -eu
docker run --rm -it alpine ls

我知道我可以通过从 docker 命令中删除 -it 参数来修复它。但是我想知道为什么 while loop 会导致这个错误。有什么方法可以在不更改 docker 命令的情况下修复它吗?

在您的第二个示例中,您忘记像在 while 循环中所做的那样更改标准输入:

< repo_list.txt

将输入作为文件,您不能同时启用交互和 tty 支持,因为该文件不是 tty 设备。