파이프를 통해 파일 읽기

파이프를 통해 파일 읽기

나는 파일 내용을 읽고 줄 끝 형식을 유지하기 위해 인터넷 해킹을 사용하는 샘플 코드를 작성했습니다. 쉘 파일을 "pipeTesting", 텍스트 파일을 "textExample"이라고 부르겠습니다. 이 파일을 쉘 스크립트에 대한 인수로 호출하면 "pipeTesting"이 작동합니다.

그러나 어떤 경우에는 파이프라인을 통해 파일이 검색됩니다. 명령을 사용하여 파이프라인Testing 에 텍스트를 제공하면 아무 것도 인쇄되지 않으므로 cat매개 변수가 전혀 없습니다 echo $@. 한 가지 주의할 점은 -p /dev/stdin파이프 사용 사례와 매개변수 사용 사례를 만들어야 한다는 것입니다 .

파이프의 경우 파일 내용을 표시하고 줄 끝을 유지하는 방법이 있습니까?

감사해요.

코드는 다음과 같습니다.

#!/bin/bash

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

그 응용 프로그램은 다음과 같습니다

$ 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 
_

답변1

#!/bin/sh

infile=${1--}

cat "$infile"

즉, infile변수를 첫 번째 인수의 이름으로 설정하고 해당 이름을 사용할 수 없는 경우 로 설정하십시오 -. 입력 파일 이름 cat-표준 입력(예: 파이프 또는 리디렉션)에서 읽혀집니다.


더 짧게:

#!/bin/sh

cat -- "${1--}"

또는 Stefan이 지적했듯이

cat -- "$@"

또한 명령줄에서 여러 파일 이름을 지정할 수도 있습니다.


더 짧게:

alias PipeTester=cat

실제로 수행 중인 작업은 재구현에 가깝습니다 cat. PipeTester실제로 스크립트는 cat별칭을 통해 수행하는 위의 스크립트로 대체될 수 있습니다.

관련 정보