寻求升级我的bash魔术。帮助解密此命令:bash -s stable


18

好的,所以我正在通过教程在Mac上安装rvm。通过curl获取rvm的bash命令是

curl -L https://get.rvm.io | bash -s stable

我在位置rvm.io上了解了上半部分的curl命令,并且将结果通过管道传递到后续的bash命令,但是我不确定该命令在做什么。我的问题:

-s:即时通讯总是对如何引用这些感到困惑。这是什么类型的东西:命令行参数?一个开关?还有什么吗

-s:它在做什么?我已经用谷歌搜索了大约半个小时,但是不确定如何引用它使它变得困难。

马::这是什么?

tl; dr:帮我解密命令bash -s stable

对于那些回答这篇文章的人,我渴望有一天像您一样接受bash的扫盲。在此之前,像我这样的混蛋感谢您的帮助!

Answers:


22

这个-s东西称为选项。在您的情况下,这意味着bash将使用第一个位置参数集执行。如果您想玩这个游戏:

$ bash -s let us set some positional parameters just for fun
$ # doh? nothing seemed to happen
$ # In fact here we're in a new instance of bash with the parameters set. Look:
$ echo "$3"
set
$ echo "$5"
positional
$ # Get it?
$ printf "%s\n" "$@"
let
us
set
some
positional
parameters
just
for
fun
$ # Amazing!
$ # Let's get out of here!
$ exit
$ # (back to previous bash session)
$

在您的情况下,通过curl下载的脚本将发送到bash(因此将被执行),并将第一个位置参数设置为stable

如果您对选项感到困惑,则不知道它们的作用:man bash然后键入/-s-s选项或多或少会带您进入描述选项的位置。或者,如果您想知道该-u选项的作用sedman sed,然后键入/-u

希望这可以帮助!


什么是“位置参数”?
MikeSchinkel '16

2
@MikeSchinkel:请参阅参考资料。位置参数是由数字,例如表示的变量,$1$8。您不能直接设置它们。当您调用程序或函数时,它们会自动设置。例如带有函数:fun() { echo "Parameter 2 is $2"; }。然后尝试fun hello worldfun "hello gniourf" "how are you?"
gniourf_gniourf '16

好的谢谢。但是仍然很困惑;这与不使用该-s选项有何不同?
MikeSchinkel '16

1
@MikeSchinkel不带-s选项:bash stable将查找文件 stable并尝试执行。使用-s选项::bash -s stable将执行其标准输入中的内容,并stable设置为$1
gniourf_gniourf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.