我正在寻找使用curl 将参数传递给从git 获取的脚本的方法,并且我的脚本需要一个参数。
有什么方法可以将参数传递给脚本,如下所示:
bash <(curl -Ls <git-script-path>)
脚本用法:./script.sh -p admin
.我正在尝试-p admin
提供 bash <(curl -Ls <git-script-path>) -p admin
任何帮助将不胜感激。谢谢
答案1
curl -Ls <git-script-path> | bash -s -- -p admin
这会导致bash
从连接到 的标准输入流读取 shell 命令curl
。和-p
是admin
可作为脚本中的位置参数访问的两个参数。需要--
来表示可执行文件的选项结束bash
。
使用一行脚本进行测试,script.sh
其中仅有的执行printf '"%s"\n' "$@"
(在单独的行上输出其带引号的命令行参数)。我们将cat script.sh
代替您执行curl
命令:
$ cat script.sh| bash -s -- -p admin
"-p"
"admin"
如果您的脚本需要交互性,则您无法从标准输入读取脚本本身。相反,通过文件名提供脚本:
$ bash <( curl -Ls <git-script-path> ) -p admin
这恰好正是您问题中的内容。请注意,这需要当前 shell 理解使用<( ... )
.
答案2
您可以通过单独的步骤执行此操作。首先,获取脚本并将其放入文件中:
curl -sL https://...git > script.sh
使其可执行:
chmod +x script.sh
并使用参数执行:
./script.sh -p admin
作为单行者:
curl -sL https://...git > script.sh && chmod +x script.sh && ./script.sh -p admin
如果您不想永久存储脚本,您可以这样做
tmpFile=$(mktemp) && curl -sL https://...git > $tmpFile && chmod +x $tmpFile && $tmpFile -p admin && rm $tmpFile
答案3
如果您想将参数传递给脚本,只需将它们添加到命令行即可:
bash <(curl -Ls <git-script-path>) -p admin
仅显示参数的命令示例:
$ bash <(echo 'echo args: "$@"') -p admin
args: -p admin