首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tty -s与检测shell是否是交互式的有什么关系?

tty -s与检测shell是否是交互式的有什么关系?
EN

Stack Overflow用户
提问于 2020-12-12 13:47:59
回答 1查看 185关注 0票数 0

我有一个第三方shell函数,它试图使用tty -s来检测它是否是从交互式shell调用的,但是报告说它在一个交互的shell中,即使它不是。

代码语言:javascript
复制
#!/usr/bin/env bash

get_shell_type() {
    tty -s && echo "INTERACTIVE" || echo "NON-INTERACTIVE"
}

为什么要这样做呢?我怎么才能修好它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-12 14:12:28

这可能是试图确定是否正在将输出写入交互式终端,而不是确定shell本身是否是交互式的。

如果是这样的话,它是一个较慢/效率较低/效率较低的程序,相当于以下内容:

代码语言:javascript
复制
get_shell_type() {
  if [[ -t 0 ]]; then echo INTERACTIVE; else echo NON_INTERACTIVE; fi
}

如果目标是确定一个shell是否是交互式的,那么它就是错误的。

shell是否是交互式的取决于它的stdin是否连接到TTY (在不清楚的情况下用作猜测的启发式),但是在完成所有试探之后,最终的决定反映在set -i是否是活动的。与所有其他set标志一样,活动的标志可以在$-中看到。因此:

代码语言:javascript
复制
get_shell_type() {
  case $- in *i*) echo "INTERACTIVE";; *) echo "NON-INTERACTIVE";; esac
}

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65265637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档