如何使用 bash -c 调用 bash 脚本函数 [重复]

Posted

技术标签:

【中文标题】如何使用 bash -c 调用 bash 脚本函数 [重复]【英文标题】:How to call a bash script function using bash -c [duplicate] 【发布时间】:2021-06-04 07:20:55 【问题描述】:

[更新]请注意,为了满足minimal reproducible example,这是本文的简化代码。脚本中会有更多的功能。

我在a Github repo 上有一个 Bash 脚本:

#!/usr/bin/env bash

fn_test1() 
    echo "starting ..."
    read -rp "Do you want to continue? yes/y or no/n   " PANS
    ans=$(echo "$PANS" | cut -c 1-1 | tr "[:lower:]" "[:upper:]")
    if [[ "$ans" = "Y" ]]; then
        echo "confirmed 1."
    fi
    echo "done"


fn_main() 
    if [ $# -eq 1 ]; then
        case $1 in
        "test")
            fn_test1
            ;;
        esac
    else
        echo "Something wrong."
        exit 1
    fi


fn_main "$@"

我想像这样从这个脚本中调用test 函数,但它不起作用:

bash -c "$(curl -s https://raw.githubusercontent.com/shinokada/awesome/main/test; test)"

输出是:

Something wrong.

如何在 bash 脚本中调用函数? 有可能吗?

【问题讨论】:

bash -c "$(curl -s https://raw.githubusercontent.com/shinokada/awesome/main/test)" bash test。这根本不是一个好习惯。 @shin:您的脚本中没有函数 test(顺便说一句,将函数命名为 test 是个坏主意)。脚本中的唯一函数是 fn_test1fn_main 脚本没有接收到任何参数 @user1934428 OP 想要以test 作为单纯的位置参数运行此脚本,并期望fn_test1 中的read -rp 能够工作。 @user1934428 啊~。也许我应该删除主函数并调用 fn_test1? 【参考方案1】:

脚本未接收任何参数。 你可以做以下简单的方法

wget https://raw.githubusercontent.com/shinokada/awesome/main/test

bash test test

【讨论】:

以上是关于如何使用 bash -c 调用 bash 脚本函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bash 脚本生成函数调用的所有可能组合

bash脚本之函数简单介绍应用及函数的简单递归调用

拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中

如何使用参数制作 Bash 函数? [复制]

如何在bash shell脚本中包含文件

Bash脚本编程