欺骗应用程序,使其认为它的stdout是终端,而不是管道。

欺骗应用程序,使其认为它的stdout是终端,而不是管道。

我试着做相反的事

检测stdin是终端还是管道?

我正在运行一个改变其输出格式的应用程序,因为它检测到stdout上的管道,我希望它是一个交互式终端,以便在重定向时得到相同的输出。

我在想用一个expect脚本或使用proc_open()在PHP中可以做到这一点,但它不能做到这一点。

外面有什么想法吗?


月关宝盒
浏览 446回答 3
3回答

慕码人2483693

基于克里斯解,我提出了以下小助手函数:faketty()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;-qfc&nbsp;"$(printf&nbsp;"%q&nbsp;"&nbsp;"$@")"&nbsp;/dev/null}古怪的外表printf中正确展开脚本的参数所必需的$@同时保护可能引用的部分命令(参见下面的示例)。用法:faketty&nbsp;<command>&nbsp;<args>例子:$&nbsp;python&nbsp;-c&nbsp;"import&nbsp;sys;&nbsp;print&nbsp;sys.stdout.isatty()"True$&nbsp;python&nbsp;-c&nbsp;"import&nbsp;sys; &nbsp;print&nbsp;sys.stdout.isatty()"&nbsp;|&nbsp;catFalse$&nbsp;faketty&nbsp;python&nbsp;-c&nbsp;"import&nbsp;sys;&nbsp;print&nbsp;sys.stdout.isatty()"&nbsp;|&nbsp;catTrue
打开App,查看更多内容
随时随地看视频慕课网APP