web-dev-qa-db-ja.com

パイプのプログラムにttyがあると思わせる

テスト環境:

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

現在、lsfile?nameを出力します(少なくともUbuntuではGNU bash))、ls | catfilenameを別々の行に出力します。

私が達成したいのは、パイプされたバージョンでfile?nameを印刷することです。

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

言い換えれば、ここでlsのようなコマンドをだまして、シェルにTTYがあるのに、TTYがない場合はどうすればよいのでしょうか。

注:lsは、ここでのサンプルプログラムにすぎません。ls -q | catのようなプログラム固有ではなく、一般的なソリューションを探しています。

19
hyde

socat を使用して、疑似端末(pty)をシミュレートできます。

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

さらに多くのオプションがあります。その ドキュメント を参照してください。

lsは、デフォルトで列単位の出力に端末の幅を使用します。私はまだ方法を見つけていません、これをsocat ptyに設定する方法、回避策はlsオプション-w WIDTHを使用することです。

18
jofel