デフォルトでは、次のコマンドを実行しようとしています。
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-buffered
grep
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クライアントはパスワードを読み取るために開きますが、標準入力を使用しません。