猿问

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

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

如何从shell脚本中检测其标准输出是否被发送到终端或者是否通过管道传输到另一个进程?

举个例子:我想添加转义代码来着色输出,但只有在交互式运行时,而不是在管道运行时,类似于什么ls --color


MYYA
浏览 681回答 3
3回答

郎朗坤

在纯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

qq_花开花谢_0

命令test(内置bash)有一个选项来检查文件描述符是否为tty。if [ -t 1 ]; then     # stdout is a ttyfi请参阅“ man test”或“ man bash”并搜索“ -t”
随时随地看视频慕课网APP
我要回答