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

如何从外部调用bash脚本中的函数并传递参数?

从外部调用Bash脚本中的函数并传递参数

问题根源

直接执行./myfirstscript.sh myFirstFunction ...时,脚本默认只会执行顶层代码,不会识别作为命令行参数传入的函数名,因此无法触发函数执行。

解决方法1:通过source导入函数到当前Shell环境

  1. 先将脚本中的函数加载到当前Shell会话:
    source ./myfirstscript.sh
    # 或简写为 . ./myfirstscript.sh
    
  2. 直接在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:35:24