这是安装 Rust 的命令:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
做什么|
?
我认为 curl 从此链接下载了一个 .sh 文件,然后 sh 以某种方式执行了它。它是如何工作的?它在我的 Dockerfile 中不起作用,我需要传递-y
给它.sh
,但我不知道如何。
答案1
您从哪里获得这些说明?很可能有文档解释了他们打算如何让您做您想做的事情。
不用说,你可以通过-y
就像这样:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
-s
指示sh
从 stdin 读取,即使有命令行参数 ( -- -y
)。--
是必要的,因此sh
知道将其-y
视为脚本的参数,而不是sh
其自身的标志。
对于你的实际问题,curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs
从下载一些数据https://sh.rustup.rs并输出它。如果你访问该 URL,你会看到内容是一个 shell 脚本。这就是你要下载的内容。
sh
是一个可以解析和运行此脚本的基本 shell 程序,例如短跑或者伯恩壳。
字符|
将左侧命令的输出通过管道传输到右侧命令的输入。所以curl ... | sh
意味着“下载此文本并运行它”。虽然这对于复杂的安装程序来说是一种常见的模式,但它在技术上是一种远程代码执行,并且可能会有风险。在将互联网上的任意内容路由到、、或其他在本地计算机上处理命令的 shell 或程序之前,请确保您信任该sh
来源。bash
python
你可能已经注意到了,你也可以从https://sh.rustup.rs并直接运行:
cd ~/Downloads # or wherever you save it to
sh rustup-init.sh -y
答案2
这|
是管道。对于你的情况,你需要卸载之前安装的 rust,然后重新安装。