Strawberry PerlとコマンドプロンプトでLinux風環境を作る方法
Strawberry PerlとコマンドプロンプトでLinux風の環境を作る方法を紹介します。
Perlエンジニアは、開発やサーバー運用をするときは、Linux/Unix環境で作業をしていることが多いです。
Linux用に作ったプログラムをWindowsで試験をしたいといった場合に、実行するコマンドがLinuxとなるべく近いとやりやすいですね。
コマンドプロンプトでもLinuxと同じ感覚で作業ができる方法を紹介します。
Linux環境とコマンドプロンプトで同じ方法で作業ができること
先にLinux環境とコマンドプロンプトで、同じ方法で作業ができることはなんでしょうか? 2020年1月に、以下は、Windows 10の環境で確認した項目です。
cdコマンド
Linuxのcdコマンドは、コマンドプロンプトにも、cdコマンドとして存在します。
ファイルパスの区切りは「/」でOK
Windowsのファイルパスの区切りは「\」ですが、実は「/」を使うこともできます。コマンドプロンプトのcdコマンドで、「/」を使った例です。
cd labo/perlzemi
gccはStrawberry Perlがインストールされていれば使える
PerlのXSモジュールをインストールするのに必要な、C言語のコンパイラであるgccは、Strawberry Perlがインストールされていれば最初から使うことができます。
gcc --help
コマンドプロンプトを閉じる
コマンドプロンプトを閉じる場合は、Linuxのexitコマンドと同じコマンドがコマンドプロンプトにも存在します。
exit
右クリックで、コピーと張り付け
コマンドプロンプトの設定で、簡易編集モードにチェックをいれると、右クリックとで、コピーと貼り付けができます。
&&によるコマンドの連続実行
コマンドプロンプトでも&&は、Linuxと同じように使えます。
command1 && command2
リダイレクトとパイプ
Linuxのリダイレクトとパイプは、コマンドプロンプトでも利用できます。
command > file.txt command < file.txt command1 | command2
コマンドプロンプトには、存在しないLinuxコマンド
次は、コマンドプロンプトには、存在しないLinuxコマンドです。存在しないのであれば、作ってしまいましょう。
Strawberry Perlがインストールされていれば、次のパスが、コマンドの検索パスに含まれているはずです。
C:\Strawberry\perl\site\bin
これは、ユーザーがインストールした実行ファイルやバッチファイルが格納される場所です。
このパスの中に、存在しないコマンドを書いてみましょう。
lsコマンドの作成
Linuxのlsコマンドに該当するコマンドを作成しましょう。
拡張子を「.bat」にするとWindowsは、それはコマンドとして認識します。
Strawberry Perlのコマンドの検索パスの中に「ls.bat」というファイルを作成してください。
以下の内容を書き込みます。これでlsコマンドでdirコマンドを呼び出します。
dir
コマンドプロンプトで以下のコマンドを実行できるようになります。
ls
makeコマンドの作成
gmakeというコマンドは、Strawberry Perlがインストールされていれば最初から使うことができます。
ですので、これをラッピングしてmakeコマンドを作成してみましょう。
Strawberry Perlのコマンドの検索パスの中に「make.bat」というファイルを作成してください。
以下の内容を書き込みます。これでmakeコマンドでgmakeコマンドを呼び出します。
gmake %1
%1は、コマンドライン引数です。これを指定しておくと「make test」のように、makeコマンドに引数を与えることができます。
コマンドプロンプトで以下のコマンドを実行できるようになります。
make
その他のLinuxコマンド
必要になればcatコマンドやrmコマンドなども、同じ方法で、簡単につくれそうですね。
Linux風環境を試す
さぁ、Linuxのあれをやってみましょう。例のあれです。
cd proj/MyModule perl Makefile.PL make && make test
いいですね!
コマンドプロンプトの文字コードをUTF-8に変更する
Linuxでは、一般的にデフォルトの文字コードはUTF-8です。コマンドプロンプトのデフォルトの文字コードはcp932ですが、これをUTF-8に、変更することができます。
よくある質問
よくある質問です。
DOSKEYで、エイリアスを使えばよいのでは?
はい、これは試しました。ですが、&&を実行するときは、コマンドプロンプトは新しいプロセスを実行します。実はこのとき環境を受け継いでくれず、エイリアスが効かなくなります。よく使う「make && make test」が実行できないです。
パワーシェルではだめなのですか?
パワーシェルは、コマンドプロンプトの改良というよりは、Windowsの運用をやりやすい用に設計されたコマンドラインツールです。
リダイレクトやパイプは「.net」上に構築されていて、「.net」の内部データ構造へ変換されてしまいます。改行コードで、意図せず、予期しづらい変換がされた経験があります。
一方、コマンドプロンプトでは、リダイレクトやパイプで、そのままの情報が出力されます。
プログラム自体の動作を確認したい場合は、そのままの情報が出力される、コマンドプロンプトが優れています。