如何将参数传递给输入到 bash 的脚本

如何将参数传递给输入到 bash 的脚本

现在我有这样的一句台词:

curl -fsSL http://git.io/vvZMn | bash

它正在下载脚本并将其作为标准输入文件传递给 bash。我想使用附加参数运行此脚本print

也许是这样的?

curl -fsSL http://git.io/vvZMn | bash -- print

但这行不通。

答案1

我相信您正在寻找的是-s选择。使用-s,您可以将参数传递给脚本。

作为一个虚拟示例来说明这一点:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

在这里,您可以看到 stdin 上提供的脚本被赋予了位置参数Print。您的脚本需要一个-u UUID参数,也可以容纳:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

所以,就你而言:

curl -fsSL http://git.io/vvZMn | bash -s -- print

或者,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

正如斯蒂芬·哈里斯(Stephen Harris)指出的那样,下载脚本并在看不见的情况下执行它是一个安全问题。

答案2

如果您的系统有/dev/stdin,您可以使用

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

不是做这个:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

如果您想使用--,请执行以下操作:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print

相关内容