この関数は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; 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で動作するようにリソースをインポートする必要がありました。