如何检测docker run启动时使用的是-t还是-i -t参数?
如何在Docker容器的Bash脚本中判断是否带有
-i参数启动 核心逻辑
Docker的-i参数会把容器的标准输入(stdin)绑定为交互式终端,仅用-t时stdin并非交互式终端。我们可以通过检查stdin的交互属性来区分这两种启动方式。
具体实现方案
方案1:Bash内置终端检测
利用Bash的内置测试语法[[ -t 0 ]],直接判断文件描述符0(即stdin)是否连接到交互式终端:
if [[ -t 0 ]]; then # 存在-i参数,可接收交互输入,提示用户 read -p "请输入配置值: " USER_INPUT else # 无-i参数,直接使用默认值 USER_INPUT="default_value" fi echo "最终使用的值: $USER_INPUT"
方案2:使用tty命令
tty -s命令会在stdin是终端时返回成功状态码,否则返回失败,以此作为判断依据:
if tty -s; then read -p "请输入配置值: " USER_INPUT else USER_INPUT="default_value" fi echo "最终使用的值: $USER_INPUT"
验证方法
- 执行
docker run -it <你的镜像> <脚本路径>:脚本会正常弹出输入提示; - 执行
docker run -t <你的镜像> <脚本路径>:脚本直接使用默认值,无输入提示。
避坑提示
不要用$TERM环境变量判断:仅-t参数也会设置$TERM(通常为xterm),无法区分是否带有-i。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

