Crie programa em um pipe pense que ele tem tty [duplicate]

15

Ambiente de teste:

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

Agora, ls imprimirá file?name (pelo menos no Ubuntu GNU bash), enquanto ls | cat imprimirá file e name em linhas separadas.

O que eu gostaria de conseguir é imprimir file?name com a versão canalizada, então algo como

$ something ls | cat' or 'ls | something | cat' or 'ls | something cat

Em outras palavras, como enganar um comando como ls here to thinking, ele tem um TTY, quando não, no shell?

Observação: ls é apenas um exemplo de programa aqui, estou procurando uma solução genérica, não específica do programa, como ls -q | cat seria.

    
por hyde 25.09.2014 / 13:18

1 resposta

13

Você pode usar socat para simular um pseudo terminal (pty):

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

Há muito mais opções, consulte a documentação .

ls usa por padrão a largura do terminal para saída em coluna. Ainda não encontrei uma maneira, como definir isso em uma sociedade, uma solução é usar o ls option -w WIDTH .

    
por 25.09.2014 / 13:56

Tags