当我在 echo 中使用 ssh 命令作为命令替换时会发生什么

当我在 echo 中使用 ssh 命令作为命令替换时会发生什么

我有点疯了……

这是我所做的

 echo `ssh [email protected]`

然后它要求输入密码,我输入了密码,然后它就卡在那里了。

我预计回声在这里被屏蔽了。这是正确的吗?

请逐步解释这里究竟发生了什么。

答案1

我预计回声在这里被屏蔽了。这是正确的吗?

命令替换总是在运行“最终”(在本例中为“外部”)命令之前进行处理。

因此echo不是“被阻止”,而是等待命令替换中的命令完成其执行,但这永远不会发生,因为命令本身会产生一个ssh交互式 shell。

您可以通过多种方式验证这一点,例如通过按Ctrl+ D、通过键入exit并点击Enter或通过打开另一个终端实例并运行:

pkill -15 -x ssh

如您所见,ssh以任何方式终止实例都会让命令替换完成其执行,最终让echo命令在其输出上运行,在本例中为零。

相关内容