ler arquivo por meio de pipeline

0

Eu escrevi um código de exemplo para ler o conteúdo de um arquivo que mantém o formato de fim de linha usando hack da internet. Eu chamei o arquivo de shell "pipeTesting" e o arquivo de texto para exibir "textExample". "pipeTesting" funciona se eu chamar o arquivo como um argumento do shell script.

No entanto, há casos em que os arquivos são recuperados por meio de pipelines; se eu fornecer o texto para pipeTesting usando o comando cat , não haverá argumentos, pois echo $@ não imprime nada. Observar que precisei usar -p /dev/stdin para criar um caso para uso de pipeline e um para uso de argumento.

Existe uma maneira de exibir o conteúdo do arquivo que contém o final da linha no caso de um pipeline?

obrigado.

O código é algo como isto:

#!/bin/bash

if [ -p /dev/stdin ]; then
    echo $@
else
    while read
    do
        echo $REPLY
    done < $1
fi
exit 0

Sua aplicação é:

$ cat textExample.txt
Much I marvelled this ungainly fowl to hear discourse so plainly,
Though its answer little meaning- little relevancy bore;
For we cannot help agreeing that no living human being
Ever yet was blessed with seeing bird above his chamber door-
Bird or beast upon the sculptured bust above his chamber door,
With such name as "Nevermore."
$ pipeTester textExample.txt 
Much I marvelled this ungainly fowl to hear discourse so plainly,
Though its answer little meaning- little relevancy bore;
For we cannot help agreeing that no living human being
Ever yet was blessed with seeing bird above his chamber door-
Bird or beast upon the sculptured bust above his chamber door,
With such name as "Nevermore."
$ cat textExample.txt | pipeTester 
_
    
por Gigiux 12.03.2018 / 16:25

1 resposta

4

#!/bin/sh

infile=${1--}

cat "$infile"

Ou seja, defina a variável infile com o nome do primeiro argumento, mas se isso não estiver disponível, defina-o como - . cat com - como nome do arquivo de entrada lerá da entrada padrão (ou seja, de um canal ou redirecionamento).

Mais curto:

#!/bin/sh

cat -- "${1--}"

ou, como Stéphane aponta,

cat -- "$@"

que também permite que você forneça vários nomes de arquivos na linha de comando.

Mais curto ainda:

alias PipeTester=cat

O que você está fazendo é mais ou menos uma reimplementação de cat . Seu script PipeTester pode, de fato, ser substituído por cat e o acima faz isso por meio de um alias.

    
por 12.03.2018 / 16:29