如何通过 ssh 将某些内容传输到 less?

如何通过 ssh 将某些内容传输到 less?

我正在尝试配置mutt绑定以将电子邮件传输到调用中,ssh以使用使用显示一些输出的脚本来处理远程计算机上的邮件less。然而,这不起作用,因为less只给我整个输出而没有分页。

试图缩小范围,我本质上试图模仿的是:

seq 1 100 | less

less在远程机器上运行。 (由于我在 mutt 中调用脚本的用例,该seq 1 100部分(代表电子邮件)无法在远程计算机上运行,​​该less部分(代表 less 的脚本)也无法在本地计算机上运行。)

如果我做:

seq 1 100 | ssh -t REMOTE_MACHINE less

我收到警告“不会分配伪终端,因为标准输入不是终端。”并less直接显示输出,不进行任何分页。

如果我做:

seq 1 100 | ssh -t -t REMOTE_MACHINE less

less失败并显示“缺少文件名(“less --help”寻求帮助)”,所以我猜它的输入丢失了。

我也尝试添加zsh -ic,但没有效果。什么是正确的ssh调用,以便less远程主机可以读取其标准输入并像往常一样进行分页?

编辑以尝试回答下面吉尔斯的评论:less如果将上面示例中的调用替换为实际脚本,也会出现此问题。如果我创建一个包含以下内容的可执行文件script.sh

#!/bin/bash

exec less

我把它放在我家里的本地和远程机器上,然后进行以下操作:

seq 1 100 | ~/script.sh

但以下情况则不然(有-t-t -t没有):

seq 1 100 | ssh REMOTE_MACHINE less

答案1

您可以将命令作为参数传递并用于-t强制伪终端分配。

例如,如果seq命令需要在远程服务器上运行:

ssh $REMOTE_HOST -t 'seq 1 100 | less'

如果seq命令需要在本地计算机上运行,​​那么您可以使用类似的使用内联字符串的命令<<<(当然引用变得有点困难):

ssh $REMOTE_HOST -t "less <<< \"$(seq 1 100)\""

相关内容