
.bash_profile
コマンドを実行する前にまずリモートをそこにロードできるように、対話型環境のリモート シェルでコマンドを実行したいと考えていました。
これはうまく機能します:
echo "command" | ssh user@remote_host
[1]
しかし、エラーが発生します
stdin は端末ではないため、疑似端末は割り当てられません。
上記のコマンドは私の目的にはうまく機能するので、これが問題かどうかはわかりませんが、それでも私はこれを解消する解決策を探しました。
ssh -t -t
[2]
これらを組み合わせると、echo "command" | ssh -tt user@remote_host
非常にうまく機能します。
しかし、Git bash では何らかの奇妙な理由で、コマンドの実行から戻った後、入力できなくなります。Cygwin でテストしたところ、問題なく動作したので、この問題が発生するのは Git bash だけです。
exit
リモート シェルにまだ目に見えない形でスタックしている場合に備えて入力してみましたが、何も機能しません。
ssh -tt
Git bash で実行する際に何が問題になるのか、何かアイデアはありますか?
答え1
「疑似端末は割り当てられません」というメッセージは単なる情報です。実行しているコマンドに端末が必要ない場合は、-T
PTY 割り当てを無効にしてメッセージを表示しないようにするオプションを指定して ssh を実行する方がよいでしょう。
何らかの理由で、ローカル TTY が奇妙な状態になっているようです。 を実行すると、stty sane
ターミナルが使用可能な状態にリセットされます。入力できないとおっしゃっていますが、次の操作を試してみてください。
- Ctrl-Q を入力すると (つまり、「Control」キーを押しながら「Q」を押す)、Ctrl-S/Ctrl-Q によるサスペンドが解除されます。
- Control-J と入力します。これは、シェルが新しいコマンド ラインを読み取る準備ができていることを確認するためのリテラルの改行文字です。
- 「stty sane」と入力し、もう一度 Control-J を押します。入力した内容が画面に表示されない場合でも試してください。
それが機能しない場合は、別の端末からスタックした TTY で「stty sane」を実行するのが最善の策です。
- 別のターミナルウィンドウを開きます。
- 「ps」を使用して、スタックしたセッションがどの PTY 上にあるかを確認します。
stty sane
PTY からリダイレクトされた入力で実行します。
たとえば、Linux の場合:
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0