일부 스크립트에서 다음과 같은 명령을 본 적이 있습니다 /bin/cat somefile | someprogram
. 일부 프로그램처럼 전체 파이프를 읽는 방법을 알고 싶습니다. 따라서 myprogram.sh를 실행하면 /bin/cat something | myprogram.sh
파이프로 연결된 모든 것(모든 파이프 텍스트)과 동일한 mypipevar라는 변수가 있습니다. 불분명한 경우 알려주시기 바랍니다. 나는 읽기가 작동하지 않을 수 있고 bash가 올바른 쉘이 아닐 수도 있다는 것을 읽었습니다.
답변1
파이프는 stdout
한 프로그램을 다른 프로그램에 연결하므로 stdin
스크립트에서 읽기만 stdin
하면 이전 명령이 인쇄한 내용을 얻을 수 있습니다. 변수로 읽는 쉬운 방법은 cat을 사용하는 것입니다 myprogram.sh
. 예를 들면 다음과 같습니다.
mypipevar="$(cat ${1:-/dev/stdin})"
echo "Obtained the value: '$mypipevar'"
그러나 한 번에 처리하기보다는 한 줄씩 처리하고 싶은 경우가 많습니다.
while read line
do
echo "$line"
done < "${1:-/dev/stdin}"
이는 ${1:-/dev/stdin}
첫 번째 인수를 제공하며 인수가 지정되지 않은 경우 /dev/stdin
파일처럼 읽을 수 있는 stdin의 내용을 포함합니다. 이를 command | script
통해 또는 간단히 script filename
.