为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测我的shell脚本是否通过管道运行?

如何检测我的shell脚本是否通过管道运行?

MYYA 2019-08-15 14:50:59
如何检测我的shell脚本是否通过管道运行?如何从shell脚本中检测其标准输出是否被发送到终端或者是否通过管道传输到另一个进程?举个例子:我想添加转义代码来着色输出,但只有在交互式运行时,而不是在管道运行时,类似于什么ls --color。
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

在纯POSIX shell中,


if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi

返回“终端”,因为输出发送到您的终端,而


(if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi) | cat

返回“不是终端”,因为括号的输出是通过管道输出的cat。


该-t标志在手册页中描述为


-t fd如果文件描述符fd打开并引用终端,则为真。


...哪里fd可以是通常的文件描述符分配之一:


0:     stdin  

1:     stdout  

2:     stderr


查看完整回答
反对 回复 2019-08-15
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

命令test(内置bash)有一个选项来检查文件描述符是否为tty。

if [ -t 1 ]; then
    # stdout is a ttyfi

请参阅“ man test”或“ man bash”并搜索“ -t


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 680 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信