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

Файл 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): Каждая команда в конвейере выполняется как отдельный процесс (т. Е. В подоболочке).

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

  • Буфер памяти в сценарии bash
  • Отображать строку в текстовом файле, если переменная соответствует части в строке?
  • Как изменить / исправить команду v меньше, используя профиль оболочки?
  • Накопить имя файла в файле журнала, используя сценарий оболочки
  • Чтение двух списков, содержащих имена файлов
  • Как добавить каталог изменений и git pull к этой линии crontab?
  • Объединение двух сценариев bash и использование меню
  • Как я могу удалить только зарегистрированные файлы в каталоге без каких-либо подсказок?
  • При выборе из меню не выполнить задачу?
  • Сценарий Bash для произвольного расширения имени файла
  • Команда scp над ssh без пароля в скрипте
  • Linux и Unix - лучшая ОС в мире.