You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让find命令正常识别bashrc中导出的bash函数

问题原因

export -f是Bash独有的函数导出语法,导出的函数仅能被子Bash进程识别。你在find的-exec参数中调用的是sh,绝大多数Linux发行版里sh指向Dash、Ash等轻量POSIX兼容Shell,这类Shell不识别Bash导出的函数格式,因此会抛出foo: not found错误。

可行解决方案

方案1:替换-exec调用的Shell为Bash

把-exec里启动的sh换成bash即可,子Bash进程会自动继承当前会话通过export -f导出的函数:

find . -exec bash -c 'cd "$1"; foo' bash {} \;

说明:bash -c后的第一个参数bash用于给子Shell的$0变量赋值,不可省略。

方案2:直接在当前Bash会话遍历路径执行

如果不想嵌套子Shell,也可以直接遍历find输出的路径调用函数,这种方式无需依赖函数导出,当前Shell定义的foo可以直接被调用:

find . -print0 | while IFS= read -r -d '' target_path; do
  # 用括号包裹命令,在独立子Shell中切换目录,避免修改当前会话的工作路径
  (cd "$target_path" && foo)
done

说明:-print0和read -d ''的组合用于兼容带空格、换行符等特殊字符的文件名,避免路径解析出错。

内容的提问来源于stack exchange,提问作者milanHrabos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:48:47