我已经将测试脚本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标准中未指定的行为。