スクリプトをカーリング/Wgetし、引数を使用して実行し、その機能をローカルで使用できるようにするにはどうすればよいですか。

スクリプトをカーリング/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ありません。したがって、呼び出しは出力では成功しますが、失敗します。wexec http://example.org/my-remote-script.sh a1 a2 a3; helloArguments: a1 a2 a3hello: 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で動作するようにリソースをインポートする必要がありました。

関連情報