- 締切済み
cygwin/sshd端末を旧来に戻す方法は?
最近cygwinのコンソールがminttyに変わったらしいのですが、 これだと昔動いていたDOSのバッチが動きません。また文字化けもひどいです。 これだけなら昔のコンソールを立ち上げDOSバッチを起動すれば済むのですが、 ホストにcygwin/sshdをインストールし、リモートからsshで接続すると、 勝手にホスト側でminttyで繋げてしまい、リモートからバッチを起動しても動作しません。 なんとかcygwin/sshdのコンソールを昔のminttyではない旧来のコンソールにできないものでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
mintty はちょっと忘れてください。 直接関係はありません。 .batということなので、中は、素のWindows用のコマンドを使って書かれているのではないでしょうか? 日本語版Windowsのコマンドは、通常、所謂Shift_JISで入出力します。 対し、CygwinはUTF-8に対応しています。 mintty等は、これに対応するため、UTF-8と解釈して表示するように標準では設定されています。 ※ minttyが標準になったのは、CygwinがUTF-8に正式に対応するようになってからです。 おそらく、従来のWIndowsのターミナルでは不十分だったからでしょう。 文字化けは、この文字コードの違いが原因と思われます。 「一致していないこと」が原因であって、ホスト、リモートどちらが「悪い」ということではありません。 ・hoge.bat がUTF-8で出力するようにする (ただし、使っているコマンドによっては無理) または ・端末側でShift_JIS表示にする (ただしCygwin 由来のUTF-8で出力するコマンドが文字化けするようになる) がとりあえずの解決策になります。 先に紹介したckは、部分的に文字コードを判定して、自動で対応する機能があり、複数の文字コードが使われている場合でも、比較的良好に表示されます。 ちなみに、そのバッチファイルと同じ機能を、Cygwinのコマンドだけのシェルスクリプトでは書けないのですか? Cygwin上のbashから実行するのに、batファイルである必要性が感じられません。 Windowsからも使うのなら、bash -e hoge.sh のような風に書かれた hoge.batを用意すれば、hoge.shの変更だけで済みますし。 ちなみに、Cygwinにはsleepというコマンドがあります。マニュアルで調べてみてください。
- kmee
- ベストアンサー率55% (1857/3366)
> 勝手にホスト側でminttyで繋げてしまい ここがちょっとよくわからないのですが。 minttyの画面が出るのはホストマシンの方ですかリモート側ですか? おそらく、ホストは関係無く、Cygwin.batでbash を起動したらminttyが立ち上がるように、 sshを実行する環境として、minttyが起動しているのではないかと思います。 sshで継ぐだけなら、TeraTerm等のSSHクライアントで接続する、という方法があります。 minttyの代替品としてはck があります。 文字コードが混在しても比較的良好に表示してくれます。 http://www.geocities.jp/meir000/ck/
補足
理解が十分ではないのでおかしな質問をしたかもしれません。 もしかしたらターミナルの問題ではないかもしれません。 現象としては、ローカル上で、 C:\Windows\System32\timeout.exe /T 10 という内容のバッチファイル(hoge.bat)を作り、 昔のターミナルを立ち上げて、 ./hoge.bat とすれば動きます。 しかし、minttyを立ち上げて同じことをすると、文字化けを表示し失敗します。 失敗はしますがここまではとりあえずいいとします。 問題はここからです。 ホスト上に同じhoge.batを置いて、 cygwin/sshクライアントがインストールされた別のコンピュータからsshでホストに接続します。 ターミナルから ssh -l Administrator -p ポート アドレス を入力してホストに接続し、 ./hoge.bat を実行してもホストのcygwinが新しいせいか、 ローカルでminttyから実行した時のように同じ文字化けを表示し失敗します。 これは別のコンピュータからホストにsshで接続する際、 昔のターミナルを使ってもminttyを使っても、現象として変わらないのです。 ほぼホスト側の原因と言っていいと思います。これを回避したいということなんですが。
補足
#1のお答えに対し、具体的な事例を出して説明しましたので 質問の趣旨が間違って伝わってしまったようです。 また文字化けを問題にしているのでもありません。 この辺の説明も不足で間違って伝わったようです。 対話的処理はありませんのでバッチ的に処理が完了すればいいのです。 ただエラーメッセージが化けるのは痛いですが。 timeoutを例に出したのは、 旧来ターミナルからの起動と、minttyからの起動で、 互換性が無く、前者では動作するが、後者では動作しない、 ということを説明する為に過ぎません。 ですからtimeoutを、 DOSバッチでも旧来ターミナル/bashでもmintty/bashでも動くようにしたいとか、 その代りになるような記述はないかとか、 そういうことをお聞きしているのではないのです。 この辺も伝わらなかったかもしれません。 それ「だけ」、なら色々方法はあり、直せば終わりですし、 これについては既に他の方法(pingでごまかす方法)で、 どれでも動くように改修しました。 しかし昔から使用しているコードが沢山あったらどうでしょう? 書き直すとか、他の代替手段とか、 そのようなアドバイスはありがたいとは思いますが、 それをすればいいのであれば今回の質問はしていません。 最終的に問題が出る度にコードを眺めて直すという、 おおよそ趣味の世界風の対応でいいのなら色々方法は思いつきます。 一般には、 ターミナルが変わっただけで処理内容が変わり互換性が損なわれるということは無い、 と思われています。 しかし、不思議なことにminttyと昔のターミナルでは、 処理内容が違うように見えるのです(説明の通り)。 これに対しローカルであればターミナルを選ぶことにより対処することが可能です。 しかしsshで接続した場合は、勝手にmintty風の応答になり、 選択できないように見えるのです。 sshd_config等も見てみましたが、それらしき指定は見つかりませんでした。 ならばアンインストール的な方法は無いのか? これが質問の趣旨です。 宜しくお願いします。