스크립트를 컬링/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에서도 작동하도록 하려면 리소스를 가져와야 했습니다 .

관련 정보