Shell
讓管道中的程序認為它有 tty
測試環境:
$ mkdir testdir $ cd testdir $ echo | tee "file name"
現在,
ls
將列印file?name
(至少在 Ubuntu GNU bash 下),同時ls | cat
將列印file
並name
在單獨的行中。我想要實現的是,
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 上設置它,一種解決方法是使用ls
option-w WIDTH
。