a3n*_*3nm 6 shell less ssh terminal
我正在尝试配置mutt绑定以将电子邮件通过管道传输到ssh调用中,以使用脚本在远程计算机上处理邮件,该脚本使用less. 但是,这不起作用,因为less只是给了我没有分页的整个输出。
试图缩小范围,我基本上试图模仿的是:
seq 1 100 | less
Run Code Online (Sandbox Code Playgroud)
但是less在远程机器上运行。(因为我的用例是在 mutt 中调用脚本,seq 1 100部分(代表电子邮件)不能在远程机器上运行,也不能less在本地机器上运行(代表较少的脚本)部分。)
如果我做:
seq 1 100 | ssh -t REMOTE_MACHINE less
Run Code Online (Sandbox Code Playgroud)
我收到警告“将不会分配伪终端,因为标准输入不是终端。” 并less直接显示输出而不做任何分页。
如果我做:
seq 1 100 | ssh -t -t REMOTE_MACHINE less
Run Code Online (Sandbox Code Playgroud)
less 因“缺少文件名(“less --help”寻求帮助)”而失败,所以我猜它的输入丢失了。
我也尝试添加zsh -ic,但没有效果。什么是正确的ssh调用,以便less在远程主机上可以读取其标准输入并照常进行分页?
编辑以尝试回答下面 Gilles 的评论:如果less上面示例中的调用被实际脚本替换,也会出现问题。如果我创建一个script.sh包含以下内容的可执行文件:
#!/bin/bash
exec less
Run Code Online (Sandbox Code Playgroud)
我把它放在我家里的本地和远程机器上,然后以下工作:
seq 1 100 | ~/script.sh
Run Code Online (Sandbox Code Playgroud)
但下列情况不(带-t或-t -t或两者都不是):
seq 1 100 | ssh REMOTE_MACHINE less
Run Code Online (Sandbox Code Playgroud)
您可以将命令作为参数传递并用于-t强制伪终端分配。
例如,如果seq命令需要在远程服务器上运行:
ssh $REMOTE_HOST -t 'seq 1 100 | less'
Run Code Online (Sandbox Code Playgroud)
如果seq命令需要在本地机器上运行,那么你可以使用使用内联字符串的类似命令<<<(当然引用变得有点困难):
ssh $REMOTE_HOST -t "less <<< \"$(seq 1 100)\""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6298 次 |
| 最近记录: |