使用curl将args从git传递到bash脚本

使用curl将args从git传递到bash脚本

我正在寻找使用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。和-padmin可作为脚本中的位置参数访问的两个参数。需要--来表示可执行文件的选项结束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

相关内容