Общее решение, которое будет работать, будет экспортировать f()
и использовать его. с xargs
. Например:
$ f()
> {
> echo param is: "$1"
> }
$ export -f f
$ grep -l string2 * | xargs -n1 bash -c 'f "$@"' {}
param is: FILE
Вам нужно использовать bash -c...
, потому что xargs
не знает о f()
, потому что, как описано здесь:
Normally, xargs will exec the command you specified directly, without invoking a shell.
И рассмотрите возможность использования -Z
с grep
вместе -0
с xargs
для правильной работы с файлами, имена которых содержат пробелы.