如何从外部调用bash脚本中的函数并传递参数?
从外部调用Bash脚本中的函数并传递参数
问题根源
直接执行./myfirstscript.sh myFirstFunction ...时,脚本默认只会执行顶层代码,不会识别作为命令行参数传入的函数名,因此无法触发函数执行。
解决方法1:通过source导入函数到当前Shell环境
- 先将脚本中的函数加载到当前Shell会话:
source ./myfirstscript.sh # 或简写为 . ./myfirstscript.sh - 直接在Shell中调用函数并传递参数:
myFirstFunction inputFN firstOutputFN lastOutputFN
这种方式会把脚本里的函数导入到当前环境,后续可以重复调用该函数,直到退出Shell。
解决方法2:修改脚本支持命令行参数指定函数
修改脚本,让它能接收函数名作为第一个参数,自动调用对应函数并传递剩余参数:
#!/bin/bash myFirstFunction(){ curl --url "$1" --output "$2" ffmpeg -i "$2" -c:v "$3" # 注意:原脚本的--i是错误参数,需改为-i rm "$2" } # 处理外部调用逻辑 if [ -n "$1" ]; then target_func="$1" shift # 移除第一个参数(函数名) # 检查函数是否存在,避免执行未知命令 if declare -f "$target_func" > /dev/null; then "$target_func" "$@" else echo "错误:函数 $target_func 不存在" exit 1 fi fi
修改后,直接用你原来的命令即可调用:
./myfirstscript.sh myFirstFunction inputFN firstOutputFN lastOutputFN
关键修正点
- 原脚本中
ffmpeg --i是错误参数,必须改为-i,否则ffmpeg无法识别输入文件。 - 确保脚本换行符为LF(\n),避免出现语法错误。
内容的提问来源于stack exchange,提问作者Wolfpack'08
相关产品推荐
相关产品推荐

