リモートSSH Gnu / Linuxサーバーは私のパイプを認識しません。

リモートSSH Gnu / Linuxサーバーは私のパイプを認識しません。

デフォルトでは、次のコマンドを実行しようとしています。

sshpass -p "xxx" ssh [email protected] "tail -f /tmp/messages | grep ptp4l" | cat -n > output.txt

私は、いくつかの技術スタッフがアクセスしているGnu / Linuxサーバーについて何も知らずにマスターデバイスのIEEE 1588v2オフセットを継続的に監視できるように、tmp / messagesにローカルファイルに書き込みを続けたいと思います。

このコマンドを実行すると、ファイルからの出力はまったく発生しません。

コマンドを手動で実行する場合:

tail -f /tmp/messages | grep ptp4l

すべてが大丈夫です。何の問題もありません。私が探している結果を得ました。

私は何を逃したことがありませんか?引用されたコマンドを介してパイプを送信できませんか?

ありがとう、スティーブン

答え1

これは、典型的な「書き込みパイプが完全にバッファリングされている」という問題です。

sshリモートシステムに疑似端末を強制的に割り当てようとするか、許可されている場合はそのオプションを-tt使用してください。--line-bufferedgrep

ssh ... -tt </dev/null 'tail -f /tmp/messages | grep ptp4l' | cat -n > output.txt

ssh ... 'tail -f /tmp/messages | grep --line-buffered ptp4l' | cat -n > output.txt

リモートシステムにttyを割り当てるときのリダイレクトは、混乱を</dev/null防ぐためです。ssh地元のtty(生モードに切り替える)はスイッチの副作用です-t。標準入力を使用しないsshコマンドを使用してこれを実行できます。/dev/tty必要に応じて、sshクライアントはパスワードを読み取るために開きますが、標準入力を使用しません。

関連情報