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

Kon*_*ten 9 command-line bash syntax

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

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

curl -sL https://blabla | sudo -E bash -
Run Code Online (Sandbox Code Playgroud)

我知道我们首先创建对 URL blabla的 Web 调用,然后(这是弹出的管道魔术)执行具有管理员提升权限的命令以打开新的终端窗口实例。

但是,当我尝试消化该命令时,我了解到它等效于以下序列。

curl --silent --location https://blabla
sudo -E bash -
Run Code Online (Sandbox Code Playgroud)

问题1:正确理解吗?

进一步,我试图了解第二行的开关是什么,并使用如下语句。

man bash | sed -n '/-E/,+1p'
Run Code Online (Sandbox Code Playgroud)

但是,我真的看不出“ -E ”是什么的简写(它是--empty还是它--或者也许是--err)并被困在解释上。另外,我无法弄清楚单独的破折号字符的作用,我不确定如何使用上面的语句在手册中查找它。

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

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

小智 12

管道命令 (|) 表示获取左侧命令的输出并将其作为输入传递给右侧命令。所以,你对什么的理解几乎是正确的

curl -sL https://blabla | sudo -E bash -
Run Code Online (Sandbox Code Playgroud)

做。您缺少的是捕获第一个命令的输出,并将其传递给第二个命令。您上面的内容需要类似于以下内容:

curl --silent --location https://blabla >/tmp/output
sudo -E bash - </tmp/output
Run Code Online (Sandbox Code Playgroud)

第二个命令末尾的破折号 (-) 只是告诉 bash 读入标准输入并处理它。所以,

sudo -E bash - </tmp/output
Run Code Online (Sandbox Code Playgroud)

相当于

sudo -E bash </tmp/output
Run Code Online (Sandbox Code Playgroud)

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

man sudo
Run Code Online (Sandbox Code Playgroud)

表明 -E 保护环境。

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

祝学习linux好运!:)


归档时间:

查看次数:

4740 次

最近记录:

7 年 前