抓取远程shell脚本,然后在localhost中使用参数运行它



我已经将测试脚本remote.sh上传到远程Web服务器,如下所示:

#!/usr/bin/bash
echo "input var is : $1"

我有一个本地脚本local.sh,如下所示:

#!/usr/bin/bash
curl -sS https://remote_host/remote.sh | bash

然后我用一些内联参数运行本地脚本:

./local.sh "some input here."

但是我获取的远程脚本似乎没有看到本地内联参数。如何做到这一点?

您的代码正在启动bash的第二个副本,并且没有将检索到的参数传递给它。

我通常建议不要启动bash的第二个副本:

#!/usr/bin/env bash
eval "$(curl -sS https://remote_host/remote.sh)"

但你可以继续这样做并通过它们。以下代码在命令行上传递,使stdin空闲(因此正在启动的bash的新副本可以使用它来提示用户(:

#!/bin/sh
code=$(curl -sS https://remote_host/remote.sh) || exit
exec bash -c "$code" bash "$@"

或者,要继续使用stdin传递代码,可以使用bash -s

#!/bin/sh
curl -sS https://remote_host/remote.sh | bash -s -- "$@"

顺便说一句,在我使用上面的/bin/sh的任何地方,你都可以用/bin/bash或任何其他符合POSIX的shell代替;需要说明的是,上面给出的代码并不依赖于POSIX.2标准中未指定的行为。

相关内容

  • 没有找到相关文章

最新更新