我如何欺骗标准输入是终端(而不是重定向文件)的程序?

Łuk*_*Lew 3 bash terminal stdin

我正在做标准重定向:

$ cat file.txt | /usr/bin/program
Run Code Online (Sandbox Code Playgroud)

但是如果我直接在终端和复制粘贴输入中运行它,程序的行为就会有所不同。当输入是终端时,它会显示一个进度条。无论如何,我想要进度条。

简而言之,如何“欺骗”输入来自终端而不是从文件重定向的程序?

Jon*_*ler 5

使用该expect程序可能是最简单的;它为您完成大部分必要的工作。

必要的工作是繁琐的。它涉及使用伪 ttys,这些设备看起来像终端这样的程序。如果您要自己动手,那么您需要了解的 POSIX 系统调用是:

posix_openpt()接口是相对较新的(第6期,与第4期,第2版对于列出的其它功能相比)。如果您的系统没有posix_openpt(),您需要自己找一本 Unix 书籍(可能是 Stevens 或 Rochkind)来了解如何打开 pty 的主端,或者仔细阅读您的系统手册。但是,posix_openpt()上面链接中的基本原理也可能有所帮助 - 它也有使用其他功能的指南。Linux有posix_openpt(); Mac OS X 和 BSD 系统通常也是如此。

图书: