
Файл tmp.sh
содержит:
func() {
ls
}
Если файл получен с помощью source tmp.sh
, функция func
работает нормально.
Однако, если источником являются cat tmp.sh | source /dev/stdin
жалобы Bash:
-bash: func3: команда не найдена
В чем разница между двумя методами поиска? С source
точки зрения не должно быть никакой разницы, так как /dev/stdin
это также будет дескриптор файла.
решение1
Из bash(1):Каждая команда в конвейере выполняется как отдельный процесс (т. е. в подоболочке).
Основная оболочка не имеет доступа к определениям своих дочерних оболочек.