管道和结束破折号的语法是什么意思?

管道和结束破折号的语法是什么意思?

免责声明。我是 Windows 的老用户,刚刚开始了解 Linux 范式。虽然我对此感到兴奋,但我明白由于无知,我的表述可能选择不当。

我收到了一个答案,其内容包括下面这一行,我需要帮助来解释(经过一段时间的谷歌搜索,我得到了一个很好的猜测,但我想让它更可靠)。

curl -sL https://blabla | sudo -E bash -

我知道我们首先要创建一个对 URL 的网络调用啦啦然后(这里弹出管道魔法)以管理员提升的权限执行命令来打开一个新的终端窗口实例。

然而,当我尝试消化该命令时,我发现它等同于以下序列。

curl --silent --location https://blabla
sudo -E bash -

问题 1:这样理解正确吗?

接下来,我尝试了解第二行的开关是什么,并使用如下语句。

man bash | sed -n '/-E/,+1p'

然而,我真的不明白“-E“是(是吗)的简写- 空的或者是--或者可能- 呃) 并陷入解释的泥潭。另外,我无法弄清楚单独的破折号字符的作用,也不确定如何使用上述语句在手册中查找它。

问题2:如何查找开关的详细语法?

问题 3:没有开关的破折号字符是什么意思?

答案1

管道命令 (|) 表示将左侧命令的输出作为右侧命令的输入。因此,你对以下内容的理解几乎是正确的:

curl -sL https://blabla | sudo -E bash -

确实如此。您缺少的是捕获第一个命令的输出,并将其传递到第二个命令中。您上面所拥有的内容需要类似于以下内容:

curl --silent --location https://blabla >/tmp/output
sudo -E bash - </tmp/output

第二条命令末尾的破折号 (-) 只是告诉 bash 读取标准输入并进行处理。因此,

sudo -E bash - </tmp/output

相当于

sudo -E bash </tmp/output

“-E”选项实际上与 sudo 相关,而不是与 bash 相关。运行以下命令:

man sudo

表明 -E 保留了环境。

希望这有助于您澄清一些事情。

祝你学习 Linux 顺利!:)

相关内容