bash 中的命令 | sh 是什么意思?

bash 中的命令 | sh 是什么意思?

这是安装 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来源。bashpython


你可能已经注意到了,你也可以从https://sh.rustup.rs并直接运行:

cd ~/Downloads # or wherever you save it to
sh rustup-init.sh -y

答案2

|是管道。对于你的情况,你需要卸载之前安装的 rust,然后重新安装。

相关内容