cat이 파이프를 통해 공급되는 경우에만 쉘 스크립트를 종료하는 이유는 무엇입니까? 이제고양이가 쉘 스크립트를 종료하는 이유는 무엇입니까?
foo
: 하나의 행이 포함
#! /bin/sh
echo $#
echo [email protected]
cat $1
sed -e 's|foo|bar|g' $1
그리고 "에 foo.txt"라는 텍스트 파일 :
적절한 예는, "foobar.sh"이라는 쉘 스크립트를 가지고 나는 일반 경우
1
foo.txt
foo
bar
: 나는 명령 행에 ./foobar.sh foo.txt
를 입력하면, 나는이 예상 출력을 얻을 수 있습니다 e cat foo.txt | ./foobar.sh
놀랍게도 나는이 출력만을 얻는다 :
나는 이해할 수 없다. 인수가 $#
인 경우 0이 있으면 cat $1
은 여전히 foo
을 반환 할 수 있습니까? 그리고, 그렇다면 왜 sed -e 's|foo|bar|g' $1
은 $ 1이 foo
이므로 분명히 반환하지 않습니까?
이것은 버그와 굉장히 비슷해 보이지만, 나는 그것이 마법이라고 가정하고 있습니다. 설명 해주십시오!
#! /bin/sh
if [ $# ]
then
yay=$(cat $1)
else
read yay
fi
echo $yay | cat
echo $yay | sed -e 's|foo|bar|g'
그렇다면 표준 입력란을 통해 보낸 내용을 어떻게 알 수 있습니까? 거기에 환경 변수가 있습니까? – CommaToast
아니요. 재미있는 게임이 있지만 일반적으로 스트림의 소비자 만 스트림에 무엇이 있는지 볼 수 있습니다. 리터럴 파이프라고 생각하십시오. 한쪽 끝에서 물건을 채우면 다른 쪽에서 나옵니다. 내부에서 일어나는 일은 투명하지 않습니다. 당신은 볼 수 없습니다. – BadZen
글쎄, 나는 stdin을 var에 할당하고 거기에서부터 읽기 명령을 사용할 수있다. 내 질문을 업데이트했습니다 ... – CommaToast