이 함수는 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에서도 작동하도록 하려면 리소스를 가져와야 했습니다 .