.bashrc
文字を読み、いくつかのキーワードを変更するawkスクリプトがあります。他の基本コマンドをパイプするとうまくいきますtail -f
が、sshをパイプすると問題が発生します。 Enterを押すまで端末に入力した内容が表示されないことを除いて、すべてが期待どおりに機能します。
~# ssh admin@localhost -p 5200 | my-script
admin@localhost's password:
admin connected from 127.0.0.1 using ssh on home
admin@ssh-server> exit ***<- I don't see this line (including the prompt) at all on terminal until I type my command (exit) and press Enter***
Connection to localhost closed.
私考えるなぜこれが起こるのか理解していますが、解決策がわかりません。 EOLが返されるまで、sshの対話型コマンドはパイプを介して送信されないと思います。私はunbuffer / stdbufからtee / scriptまで検索し、さまざまなリダイレクトコマンドを使用して見つけることができるすべてを試しましたが、運がありませんでした。
ノート:実際には、EOLの後に文字列を私のスクリプトに渡すことができます。ちょうど私が入力している内容を見ることができればいいのです。つまり、ターミナルstdinはいつものようにエコーする必要があります。
ベストアンサー1
私は次のことができます:
$ ssh [email protected] | tee output
Last login: Tue Aug 15 03:06:11 2017 from 127.1.2.3
$ ls /
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
$ logout
Shared connection to example.com closed.
$ cat output
Last login: Tue Aug 15 03:06:11 2017 from 127.1.2.3
$ ls /
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
$ logout
ssh
通常、リモートホストを編集すると、プロンプト、私が入力した内容などがすべて表示されます。