Cmderのsshで特定のホストだけウィンドウカラーを変える
茨の道をつきすすむ。
特定のホストだけコンソールの色を変える
巷では、本番サーバに入るときにコンソールの色を変えたりするらしいじゃないですか。
本番のコンソールは開きっぱで間違えてrm -rf /した!とかいうことを未然に防げそう。
事故を減らすには良いと思います。
でも、Windowsでそんなことが簡単にできると思うなよ?
Cmderは使いやすいが...
ConEmuならここまで苦労しなかった。
ConEmuなら/Paletteという起動オプションがあるらしく、まあこれでパレット(= カラースキーム)を設定できる。
しかし、CmderではConEmuの起動オプションは使えないのだ!フゥーーーーーSo Cooooooooool!!*1
No list of command-line options? · Issue #370 · cmderdev/cmder · GitHub
どうやるか
自作のsshコマンドを差し込む
まず、sshコマンドを実行した時に、本番サーバであればカラースキームを設定した新しい窓を開き、そうでなければ普通にSSHを実行するバッチを用意する。
@echo off set SSH=C:\path\to\ssh.exe findstr %1 %HOMEPATH%\.ssh\product_hosts if ERRORLEVEL 1 ( %SSH% %* goto :EOF ) set PRODUCT_SSH=%* Cmder
%HOMEPATH%\.ssh\product_hostsに、本番サーバのホスト名を書く。
部分一致で検索してるだけなので改行区切りでもなんでもいいが、あるホスト名が他のホスト名に含まれた場合に微妙だから直したほうがいいと思う。
こうして、環境変数PRODUCT_SSHを設定してからCmderを実行することで、以下で設定するTaskの挙動を変える。
Cmderの設定
CmderのTaskに書くコマンドの引数に-new_console:P:"<カラースキームの名前>"を設定すると、Cmderの色が変わるようだ。*2
つまり、

こんなふうにCmderのTaskを設定し、
@echo off IF DEFINED PRODUCT_SSH ( set CMDER_PALETTE=product_ssh set INIT_CMD="C:\path\to\ssh.exe %PRODUCT_SSH%" ) ELSE ( set CMDER_PALETTE=Monokai set INIT_CMD="" ) C:\path\to\nyagos.exe -k %INIT_CMD% -new_console:P:"%CMDER_PALETTE%"
cmder_task_init.batをこうすると、環境変数PRODUCT_SSHが定義されているかどうかで挙動が変わる。
自分はNYAGOSをつかっているのでnyagos.exe -k %INIT_CMD%としているが、ほかのShell*3の場合は初期実行するコマンドを適宜設定すればいいと思う。
結果

やったー!!!
微妙なところ
余計なタブが一枚開くのが微妙。なぜだ...