mutt
バインディングを構成して、メールをssh
呼び出しにパイプし、less
を使用して出力を表示するスクリプトを使用してリモートマシンでメールを処理しようとしています。ただし、これは機能しません。less
は、ページングなしで出力全体を提供するだけだからです。
それを絞り込もうとして、私が基本的にエミュレートしようとしているのは:
seq 1 100 | less
しかし、less
をリモートマシンで実行しています。 (私がmuttでスクリプトを呼び出すユースケースのため、seq 1 100
部分(電子メールを表す)をリモートマシンで実行することも、less
部分(スクリプトを表す)をローカルマシンで実行することもできません。
私が行った場合:
seq 1 100 | ssh -t REMOTE_MACHINE less
「標準入力は端末ではないため、疑似端末は割り当てられません。」という警告が表示されます。 less
は、ページングを行わずに出力を直接表示します。
私が行った場合:
seq 1 100 | ssh -t -t REMOTE_MACHINE less
less
は「ファイル名がありません(ヘルプの「--help」が少ない)」で失敗するため、入力が失われたと思います。
私も追加してみましたzsh -ic
、効果なし。 リモートホストのssh
が標準入力を読み取り、通常どおりにページングできるように、正しいless
呼び出しは何ですか?
以下のGillesのコメントに回答するように編集します:上記の例のless
呼び出しが実際の脚本。実行可能ファイルを作成した場合script.sh
含む:
#!/bin/bash
exec less
そして、これをローカルマシンとリモートマシンの両方の自宅に配置すると、次のように機能します。
seq 1 100 | ~/script.sh
しかし、以下はそうではありません(-t
または-t -t
またはどちらでもない:)
seq 1 100 | ssh REMOTE_MACHINE less
コマンドを引数として渡し、-t
を使用して強制的に端末を割り当てることができます。
たとえば、seq
コマンドをリモートサーバーで実行する必要がある場合:
ssh $REMOTE_Host -t 'seq 1 100 | less'
seq
コマンドをローカルマシンで実行する必要がある場合は、インライン文字列<<<
を使用して同様のコマンドを使用できます(もちろん、引用は少し難しくなります)。
ssh $REMOTE_Host -t "less <<< \"$(seq 1 100)\""