일부 스크립트에서 다음과 같은 명령이 표시됩니다. /bin/cat somefile | someprogram
. someprogram과 같은 방식으로 전체 파이프를 읽는 방법을 알고 싶습니다. 따라서 /bin/cat something | myprogram.sh
를 실행하면 myprogram.sh에는 파이프 된 모든 파이프 텍스트와 동일한 mypipevar라는 변수가 있습니다. 명확하지 않은 경우 알려주세요. 읽기가 작동하지 않을 가능성이 높고 bash가 올바른 셸이 아닐 수 있음을 읽었습니다.
Answer
The pipe connects 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
로 실행할 수 있습니다.