파이프 및 bash에서 사용하는 방법

일부 스크립트에서 다음과 같은 명령이 표시됩니다. /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로 실행할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다