测试环境:
$ mkdir testdir
$ cd testdir
$ echo | tee "file
name"
Run Code Online (Sandbox Code Playgroud)
现在,ls
将打印file?name
(至少在 Ubuntu GNU bash 下),而ls | cat
将在单独的行中打印file
和name
。
我想要实现的是,file?name
用管道版本打印,所以像
$ something ls | cat` or `ls | something | cat` or `ls | something cat
Run Code Online (Sandbox Code Playgroud)
换句话说,如何让像ls
这里这样的命令陷入思考,它有一个 TTY,当它没有时,在 shell 中?
注意: ls
这里只是一个示例程序,我正在寻找通用解决方案,而不是特定于程序的解决方案ls -q | cat
。
jof*_*fel 21
你可以socat
用来模拟一个伪终端(pty):
socat - EXEC:'ls --color=auto',pty,setsid,ctty | cat
Run Code Online (Sandbox Code Playgroud)
还有更多选项,请参阅其文档。
ls
默认情况下使用终端的宽度进行列输出。我还没有找到一种方法,如何在 socat pty 上设置它,解决方法是使用ls
选项-w WIDTH
.