Функция оценки команды sed не работает - PullRequest
1 голос
/ 07 марта 2019

у меня есть эта функция

function test { echo $1; }

у меня есть это выражение sed

echo "hello" | sed "s/hello/test world/e"

ожидаемый результат был

"world"

, но он дает результат

sh: test: command not found

моя ОС: linux fedora 20, sed (GNU sed) 4.2.2.

есть идеи для решения?

1 Ответ

0 голосов
/ 07 марта 2019

Функции оболочки доступны только в текущей оболочке.

Их нельзя вызывать с помощью внешних команд, таких как 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.

...