在Solaris系统中通过Unix find命令调用本地BASH脚本函数可行吗?
脚本可行性分析与修正方案
你的这段bash脚本不可行,原因是:find命令的-exec选项会在独立的子shell中执行指定命令,而你在当前shell里定义的processFile函数,子shell无法访问,运行时会抛出processFile: command not found的错误。
两种可行的修正方式:
方式一:在子shell中直接定义并调用函数
把函数定义和调用逻辑放到bash -c的参数里,让子shell能直接访问:
#!/bin/bash find . -type f -amin 88 -exec bash -c ' processFile() { echo "$1" } processFile "$0" ' {} \;
方式二:导出函数到环境变量
用export -f把函数导出到环境,让子shell继承这个函数(这是bash的特有功能):
#!/bin/bash processFile() { echo "$1" } # 导出函数到环境 export -f processFile find . -type f -amin 88 -exec bash -c 'processFile "$0"' {} \;
另外注意:原脚本里的echo $1建议改成echo "$1",如果文件名包含空格、换行或特殊字符,不加双引号会导致参数被错误拆分,输出不符合预期。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

