如何curl/wget 脚本,使用参数运行它,并使其函数在本地可用?

如何curl/wget 脚本,使用参数运行它,并使其函数在本地可用?

该函数将使用 cURL 或 wGet 下载脚本并使用附加参数执行它:

wexec() {
    url=$1
    shift
    if command -v "curl" >/dev/null 2>&1; then
        curl -s $url | bash -s -- $@
    elif command -v "wget" >/dev/null 2>&1; then
        wget -qO- $url | bash -s -- $@
    else
        echo "No curl or wget found."
        return 1
    fi
}

我想从服务器下载并运行以下脚本,并使用传递的参数在本地运行它:

#!/usr/bin/env bash
hello() {
    echo Hello World!
}
echo Arguments: $@

我也希望该hello函数在本地环境中可用,但事实并非如此,因为我在子shell new shell中定义了它,所以调用wexec http://example.org/my-remote-script.sh a1 a2 a3; hello将成功输出Arguments: a1 a2 a3,但失败并显示hello: command not found.

有没有办法从本地环境发送参数并仍然从远程脚本接收函数?

答案1

看来当前的函数参数会自动传递给源脚本,所以我可以这样做:

wexec() {
    url="$1"
    shift
    if command -v "curl" >/dev/null 2>&1; then
        \. /dev/stdin <<< "$(curl -s "$url")"
    elif command -v "wget" >/dev/null 2>&1; then
        \. /dev/stdin <<< "$(wget -qO- "$url")"
    else
        echo "No curl or wget found." >&2
        return 1
    fi
}

这实在是太令人惊讶了。

我还必须从中获取资源/dev/stdin才能使其在 macOS 上也能运行。

相关内容