Pretend to be a tty in bash for any command
本问题已经有最佳答案,请猛点这里访问。
每当我使用
所以我的问题是,是否可以欺骗一个命令,让它认为该命令是在tty中运行的?
例如,运行
1 2 | grep --color word file # Outputs some colors grep --color word file | cat # Doesn't output any colors |
我想写些东西,比如:
1 | IS_TTY=TRUE grep --color word file | cat # Outputs some colors |
这个问题似乎有一个工具可以做我想做的事情:在伪终端(pty)下空运行进程和应用程序,但从我在文档中可以看到的内容来看,我不确定它是否可以帮助解决我的问题。
有许多选项,如其他几个堆栈溢出答案所概述的(请参阅Caarlos的注释)。不过,我将在这里总结一下:
使用
1 | 0<&- script -qefc"ls --color=auto" /dev/null | cat |
或者生成bash函数
1 2 3 4 | faketty () { script -qfce"$(printf"%q""$@")" } faketty ls --color=auto | cat |
或者在鱼壳里:
1 2 3 4 | function faketty script -qefc"(printf"%q""$argv")" end faketty ls --color=auto | cat |
(这是我们的答案)
http://linux.die.net/man/1/script/脚本
使用
1 2 | sudo apt-get install expect-dev unbuffer -p ls --color=auto | cat |
或者如果你用鱼壳:
1 2 3 4 | function faketty unbuffer -p $argv end faketty ls --color=auto | cat |
http://linux.die.net/man/1/unbuffer
这是一篇关于tty如何工作以及伪tty(pty)是什么的很好的文章,如果您想了解Linuxshell如何使用文件描述符传递输入、输出和信号,那么值得一看。http://www.linusakeson.net/programming/tty/index.php