Почему этот исходный оператор не работает?

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

 func() { ls } 

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

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

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

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

One Solution collect form web for “Почему этот исходный оператор не работает?”

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

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

  • Создание сочетаний элементов из вектора для ввода в качестве входных данных в программе
  • Как разрешить запуск сценария кем угодно в любом месте
  • Запуск сценария в качестве опции загрузки Grub
  • Найти шаблон между специальными символами
  • Shell Script не отправляет электронное письмо из задания Cron
  • Сценарий для поиска среды рабочего стола по умолчанию?
  • Пока команда не найдена и синтаксическая ошибка рядом с неожиданным токеном
  • (ubuntu 16.04) .rules file /etc/udev/rules.d/, похоже, не выполняет работу
  • Как выбрать файлы в сценарии bash, у которых нет расширения?
  • Почему мой bashscript не работает?
  • Скажите, как эта команда проверяет, имеет ли rnum целое число или нет
  • Linux и Unix - лучшая ОС в мире.