Почему это утверждение источника не работает?

Почему это утверждение источника не работает?

Файл tmp.shсодержит:

func() {
   ls
}

Если файл получен с помощью source tmp.sh, функция funcработает нормально.

Однако, если источником являются cat tmp.sh | source /dev/stdinжалобы Bash:

-bash: func3: команда не найдена

В чем разница между двумя методами поиска? С sourceточки зрения не должно быть никакой разницы, так как /dev/stdinэто также будет дескриптор файла.

решение1

Из bash(1):Каждая команда в конвейере выполняется как отдельный процесс (т. е. в подоболочке).

Основная оболочка не имеет доступа к определениям своих дочерних оболочек.

Связанный контент