为什么不在bash脚本中导出函数工作

时间:2016-01-27 22:53:08

标签: bash

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

您正在使用bash&#39; export,但使用可能无法理解的普通sh(可能符合bash的符号链接,在所有平台上都不一定正确)。

使用bash执行。变化:

find . -maxdepth 1 -exec sh -c 'doit "$@" ' {}  \+

find . -maxdepth 1 -exec bash -c 'doit "$@" ' {}  \+