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

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

docker run –help for -t -i

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

我已经尝试了以下,但即使在本地testing(不是在docker里面),它不工作,并始终打印出“不互动”。

 #!/bin/bash [[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive' 

entrypoint.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"] 

build立形象:

 $ 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 $ 

这个计算器的答案帮助我find[ -t 0 ]