Shell

讓管道中的程序認為它有 tty

  • April 15, 2016

測試環境:

$ mkdir testdir
$ cd testdir
$ echo | tee "file 
name"

現在,ls將列印file?name(至少在 Ubuntu GNU bash 下),同時ls | cat將列印filename在單獨的行中。

我想要實現的是,file?name使用管道版本列印,比如

$ something ls | cat` or `ls | something | cat` or `ls | something cat

換句話說,如何欺騙像ls這裡這樣的命令認為它有一個 TTY,當它沒有時,在 shell 中?

注意: ls這裡只是一個範常式序,我正在尋找通用解決方案,而不是特定於程序的解決方案ls -q | cat

你可以socat用來模擬一個偽終端(pty):

socat - EXEC:'ls --color=auto',pty,setsid,ctty | cat

還有更多選項,請參閱其文件

ls預設情況下使用終端的寬度進行列輸出。我還沒有找到一種方法,如何在 socat pty 上設置它,一種解決方法是使用lsoption -w WIDTH

引用自:https://unix.stackexchange.com/questions/157458