我正在使用 ssh 命令连接远程服务器并执行一些命令。可以通过直接提供我想要执行的命令来完成,也可以通过文件将输出重定向到 ssh 命令来完成。 现在,我发现这种行为很奇怪。
ssh -q user@server "cat"
在等待文件名时会卡住。
ssh -q user@server < filename.txt
此命令立即执行并返回命令提示符。
filename.tx
t 的内容为 cat
。
有人可以帮助我理解这种行为背后的原因吗?
浏览了一些链接,但没有帮助
第一个示例不等待文件名。不带参数的
cat
从其标准输入读取,在本例中为终端。所以它正在等待您输入将要打印的内容。就像您在本地 shell 中输入 cat
一样 - 它会重复您输入的任何内容,直到您输入 EOF 字符(通常是 Ctl-d)。
第二个示例在远程系统上运行交互式 shell,其标准输入重定向到 SSH 连接。
ssh
将其输入重定向到文件。因此,远程 shell 接收命令 cat
,后跟 EOF。它执行 cat
命令,该命令从其标准输入读取;它立即读取 EOF,因此退出。然后 shell 退出,因为它还从连接中读取 EOF。所以没有输出。