パイプのプログラムはttyがあると思うようにします。

パイプのプログラムはttyがあると思うようにします。

テスト環境:

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

これで(少なくともUbuntu GNU bashでは)別の行に印刷されlsます。file?namels | catfilename

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

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

つまり、ls実際にはTTYがありませんが、シェルにTTYがあると思うように、ここのようなコマンドをだます方法は何ですか?

メモ: ls以下はサンプルプログラムです。特定のプログラムではなく、一般的なソリューションを探していますls -q | cat

答え1

あなたはそれを使用することができますsocat擬似端末(pty)シミュレーション:

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

より多くのオプションがあるので確認してください文書

lsデフォルトでは、熱出力には端子幅が使用されます。 socat ptyでこれを設定する方法が見つかりませんでした。回避策はlsoptionsを使用することです-w WIDTH

関連情報