이 소스 선언이 작동하지 않는 이유는 무엇입니까?

이 소스 선언이 작동하지 않는 이유는 무엇입니까?

이 파일 tmp.sh에는 다음이 포함됩니다.

func() {
   ls
}

source tmp.sh이 기능 은 func.

그러나 구매가 cat tmp.sh | source /dev/stdinbash 불만으로 이루어진 경우:

-bash: func3: 명령을 찾을 수 없습니다.

이 두 가지 구매 방법의 차이점은 무엇입니까? source관점 에서는 /dev/stdin파일 핸들이기도 하므로 차이가 없어야 합니다.

답변1

Bash(1)에서:파이프라인의 각 명령은 별도의 프로세스(즉, 하위 셸에서)로 실행됩니다.

기본 셸은 해당 하위 셸의 정의에 액세스할 수 없습니다.

관련 정보