Использование Eval на строку, которая содержит команду, которая определяет функцию работает без проблем:Почему `eval` не работает внутри моей петли?
$ eval "p4() { echo 4; }"
$ p4
4
Однако, когда я делаю это так, что больше не работает:
$ echo 'p3() { echo 3; }' | while read line ; do eval "$line"; done
$ p3
-bash: p3: command not found
Почему не эта работа?
Я не уверен, что вы должны играть с 'eval', если вы еще не понимаете подоболочек. – chepner