我正在尝试使用find中的bash函数。我知道我需要导出该功能。当我从命令行执行此操作时。当我在bash脚本中执行此操作时,它不会。代码如下所示。如果你执行它不起作用。如果你采购它,那么它。有趣的是,一旦你获得它,脚本就会起作用,因为它是在脚本调用时定义的。
#!/bin/bash
function doit {
echo args "<$@>"
}
doit a b c
export -f doit
find . -maxdepth 1 -exec sh -c 'doit "$@" ' {} \+
这是我看到的错误:
> ./x.sh
args <a b c>
.: doit: command not found
答案 0 :(得分:1)
您正在使用bash
&#39; export
,但使用可能无法理解的普通sh
(可能符合bash的符号链接,在所有平台上都不一定正确)。
使用bash执行。变化:
find . -maxdepth 1 -exec sh -c 'doit "$@" ' {} \+
到
find . -maxdepth 1 -exec bash -c 'doit "$@" ' {} \+