假装成为任何命令的bash中的tty

前端之家收集整理的这篇文章主要介绍了假装成为任何命令的bash中的tty前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
每当我使用grep,并且我将它管道到另一个程序,–color选项是不被尊重的.我知道我可以使用–color = always,但它也提出了一些其他命令,我想得到该命令的确切输出作为输出我会得到,如果我在一个tty.

所以我的问题是,有可能欺骗一个命令,认为这个命令是在tty里面运行的吗?

例如,运行

grep --color word file # Outputs some colors
grep --color word file | cat # Doesn't output any colors

我想要写一些类似的东西:

IS_TTY=TRUE grep --color word file | cat  # Outputs some colors

This question似乎有一个可以做我想要的工具:empty – run processes and applications under pseudo-terminal (PTY),但从我可以在文档中阅读,我不知道它可以帮助我的问题

有几个选项,如几个其他Stack Overflow答案所述(参见 Caarloscomment).我会在这里总结一下:

>使用脚本printf并做一点bash功能

faketty () { script -qfc "$(printf "%q " "$@")"; }
faketty ls --color=auto | cat

(信用到answer)
>使用简单的脚本和一些bash重定向

0<&- script -qfc "ls --color=auto" /dev/null | cat

http://linux.die.net/man/1/script
>使用unbuffer命令(作为期望命令套件的一部分),不幸的是这需要一个大的50mb安装:

sudo apt-get install expect-dev
unbuffer -p ls --color=auto | cat

http://linux.die.net/man/1/unbuffer

这是一篇关于TTY如何工作以及什么伪TTY(PTY))的伟大文章,如果您想了解linux shell如何使用文件描述符传递输入,输出和信号,那么值得一看. http://www.linusakesson.net/programming/tty/index.php

猜你在找的Bash相关文章