此函数将使用 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
。
有没有办法从本地环境发送参数并仍然从远程脚本接收函数?
似乎当前函数参数自动传递给源脚本,所以我可以这样做:
这很令人惊讶。
我还必须从中获取资源
/dev/stdin
才能使其在 macOS 上也能正常工作。