Linux 中 ssh 命令的奇怪行为

问题描述 投票:0回答:1

我正在使用 ssh 命令连接远程服务器并执行一些命令。可以通过直接提供我想要执行的命令来完成,也可以通过文件将输出重定向到 ssh 命令来完成。 现在,我发现这种行为很奇怪。

ssh -q user@server "cat"

在等待文件名时会卡住。

ssh -q user@server < filename.txt

此命令立即执行并返回命令提示符。

filename.tx
t 的内容为
cat

有人可以帮助我理解这种行为背后的原因吗?

浏览了一些链接,但没有帮助

linux ssh
1个回答
0
投票

第一个示例不等待文件名。不带参数的

cat
从其标准输入读取,在本例中为终端。所以它正在等待您输入将要打印的内容。就像您在本地 shell 中输入
cat
一样 - 它会重复您输入的任何内容,直到您输入 EOF 字符(通常是 Ctl-d)。

第二个示例在远程系统上运行交互式 shell,其标准输入重定向到 SSH 连接。

ssh
将其输入重定向到文件。因此,远程 shell 接收命令
cat
,后跟 EOF。它执行
cat
命令,该命令从其标准输入读取;它立即读取 EOF,因此退出。然后 shell 退出,因为它还从连接中读取 EOF。所以没有输出。

© www.soinside.com 2019 - 2024. All rights reserved.