Функции оболочки доступны только в текущей оболочке.
Их нельзя вызывать с помощью внешних команд, таких как sed
, env
, sudo
, find
или xargs
:
$ foo() { echo "hello world"; }
$ foo
hello world
$ sed -e 's/.*/foo/e'
sh: 1: foo: not found
$ env foo
env: ‘foo’: No such file or directory
Если вы хотите запустить оболочкуКоманды из такого контекста, поместите их в отдельный скрипт, чтобы вы могли вызывать его вместо этого.
Bash поддерживает экспорт функций в дочерние экземпляры bash, но, в частности, dash
удалит их из среды, поэтому они могутне может использоваться для sed
, который вызывает sh -c
, даже если вы в конечном итоге запускаете второй экземпляр bash.