나는 파일 내용을 읽고 줄 끝 형식을 유지하기 위해 인터넷 해킹을 사용하는 샘플 코드를 작성했습니다. 쉘 파일을 "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
별칭을 통해 수행하는 위의 스크립트로 대체될 수 있습니다.