如何检测我的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
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
命令test
(内置bash
)有一个选项来检查文件描述符是否为tty。
if [ -t 1 ]; then # stdout is a ttyfi
请参阅“ man test
”或“ man bash
”并搜索“ -t
”
- 3 回答
- 0 关注
- 680 浏览
添加回答
举报
0/150
提交
取消