gpt4 book ai didi

bash - 如何从docker检测bash中的完全交互式shell?

转载 作者:IT老高 更新时间:2023-10-28 21:25:58 24 4
gpt4 key购买 nike

我想在“docker run”中检测 -ti 是否已传递给入口点脚本。

docker run --help for -t -i

-i, --interactive=false     Keep STDIN open even if not attached
-t, --tty=false Allocate a pseudo-TTY

我尝试了以下方法,但即使在本地(不是在 docker 内)进行测试,它也无法正常工作,并且总是打印出“非交互式”。

#!/bin/bash

[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'

最佳答案

入口点.sh:

#!/bin/bash

set -e

if [ -t 0 ] ; then
echo "(interactive shell)"
else
echo "(not interactive shell)"
fi
/bin/bash -c "$@"

Dockerfile:

FROM debian:7.8

COPY entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod 755 /usr/bin/entrypoint.sh
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
CMD ["/bin/bash"]

构建镜像:

$ docker build -t is_interactive .

以交互方式运行图像:

$ docker run -ti --rm is_interactive "/bin/bash"
(interactive shell)
root@dd7dd9bf3f4e:/$ echo something
something
root@dd7dd9bf3f4e:/$ echo $HOME
/root
root@dd7dd9bf3f4e:/$ exit
exit

以非交互方式运行图像:

$ docker run --rm is_interactive "echo \$HOME"
(not interactive shell)
/root
$

这个 stackoverflow answer帮我找到 [ -t 0 ].

关于bash - 如何从docker检测bash中的完全交互式shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com