“comando | menos ”vs“ menos (comando) ”

6

Um "idioma" comum para visualizar grandes quantidades de saída de comando é canalizá-lo para less , via command | less . No entanto, também é possível (talvez apenas em bash , não testado em outros shells) usar a sintaxe less <(command) , mas less tende a reclamar /dev/fd/63 is not a regular file . Depois de bisbilhotar em /proc/*/fd , vejo que em ambos os casos, está lendo de um pipe. A única diferença é que, no primeiro caso, é stdin sendo redirecionado. No segundo caso, ele está recebendo /dev/fd/63 como um nome de arquivo. O less de alguma forma "ignora" a verificação de arquivo regular ao ler de stdin ? Além disso, como determina que /dev/fd/63 não é um arquivo regular, mesmo se o conteúdo for texto?

    
por Drew McGowen 24.07.2014 / 21:44

2 respostas

3

less normalmente se recusa a abrir arquivos não regulares como pipes ou também binários. Você pode usar o operador -f para forçar o less a abrir arquivos não regulares:

less -f <(command)

Outra abordagem é usar a substituição de processos :

less < <(command)

Isso faz com que o pipe criado com <() atue como entrada padrão ( STDIN ) para less .

    
por 24.07.2014 / 22:08
2

less tends to complain /dev/fd/63 is not a regular file

A solução para isso, pelo menos sob o GNU, é o uso da opção -f :

less -f <(command)

Em circunstâncias normais, less não abrirá arquivos não regulares (exceto stdin, obviamente). Isso é para sua proteção. -f força a abertura de arquivos não regulares.

    
por 24.07.2014 / 22:02