読者です 読者をやめる 読者になる 読者になる

私をペロペロするがよい

lazy_dog のブログです。

Tera Term + Cygwin で任意のディレクトリを開いた状態で起動する

スクリプト

やりたいこと

DF から Tera Term + Cygwin で、任意をフォルダをモルっと開きたい。

やったこと

スクリプト書いた。

スクリプトWindows バッチファイルと Powershell の 2 つから構成され、基本バッチファイルの方にコマンドラインオプションをぶち込むことで、Tera Term + Cygwin が開かれる。

バッチスクリプトの方

UAC は切ってある前提。

ファイル名: OpenCygwin.bat

@echo off

powershell -ExecutionPolicy Unrestricted -File OpenCygwinSub.ps1 %1


exit

Powershell の方

ファイル名: OpenCygwinSub.ps1

$result = & C:\cygwin\bin\cygpath.exe -u $Args[0]

& D:\app\teraterm\cyglaunch.exe -ls -d "$result" -v CHERE_INVOKING=y


exit

実行や!

実行方法は下記の通り。

> OpenCygwin.bat C:\file\path\to\dir

解説

Cygwin の /bin フォルダに cygpath.exe というものがあり、これはオプションで与えられたパスを、Windows か *nix 形式で返してくれる。

$ cygpath.exe
Usage: cygpath (-d|-m|-u|-w|-t TYPE) [-f FILE] [OPTION]... NAME...
       cygpath [-c HANDLE]
       cygpath [-ADHOPSW]
       cygpath [-F ID]

Convert Unix and Windows format paths, or output system path information

Output type options:

  -d, --dos             print DOS (short) form of NAMEs (C:\PROGRA~1\)
  -m, --mixed           like --windows, but with regular slashes (C:/WINNT)
  -M, --mode            report on mode of file (binmode or textmode)
  -u, --unix            (default) print Unix form of NAMEs (/cygdrive/c/winnt)
  -w, --windows         print Windows form of NAMEs (C:\WINNT)
  -t, --type TYPE       print TYPE form: 'dos', 'mixed', 'unix', or 'windows'

なので、-u でコマンドラインオプションの Windows 形式のパスを *nix 形式に変換し、それを cyglaunch.exe に渡している。

Powershellスクリプトのセキュリティとかめんどくさいので、 -ExecutionPolicy Unrestricted で実行させる。UAC ダイアログが表示される場合もあるが、その場合は、UAC 自体を切るか、-ExecutionPolicy オプション自体を外す。 あとは、cyglaunch.exe に渡すだけ。普通に -d オプションで渡すだけだと NG で、 -v CHERE_INVOKING=y がミソらしい。

ちなみに、この "CHERE_INVOKING" ってのは、Cygwin の /etc/profile で処理される変数。

# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
  unset CHERE_INVOKING
else
  cd "${HOME}" || echo "WARNING: Failed attempt to cd into ${HOME}!"
fi

CHERE_INVOKING がなんか入ってたら、unset するだけだけど、入ってたら HOME へ cd される。

おわり

はてなの Markdown のシンタックスPowershellWindows バッチ使えるのん?