TL;DR
設定ファイルを設定ディレクトリに、alias命令文をalias命令ファイルに。
考え方を変換するのです。
はじめに
簡単にコマンドを作りたい!
そう考えた時、非Windowsユーザは .bashrc
ファイルなどにaliasを設定すれば終わりです。
しかもファイルが消えない限り、そのシステム内では永久に使うことができます。
しかしWindowsユーザは困りました。
.bashrc
ファイルなどという便利なものはありません。
ではどうしましょうか。
先人の知恵を借りてみます。
Windowsのコマンドプロンプトでaliasを設定する (cmderの設定含む)
https://qiita.com/little_hand_s/items/91d6bcb680eba10da835
Windowsのコマンドプロンプトでaliasっぽいのを登録できるようにする
https://qiita.com/analytics-hiro/items/7c2140bfca57cddbb859
Windows コマンドに Linux 風なエイリアスを登録して永続化させる
http://neos21.hatenablog.com/entry/2016/01/19/031150
要約すると、次の2種類の方法だそうです。
- コマンドプロンプト起動時のショートカットで
doskey
コマンドを利用して設定ファイルを読込む - レジストリを利用して設定ファイルを読込む
ファイルをいじればいいからLinuxライクで、確かに便利そうです。
一方で、問題点もあります。
- PowerShellではどうするの?
- Bash on Windowsではどうするの?
- ConEmuではどうするの?
- Nyagosではどうするの?
つまり、Windowsのコマンドプロンプトだけでは物足りないユーザは、様々な代替コマンドプロンプトを使っており、上記の手法が使えない場合があります。
しかも、新しい代替ツールを試してみたいのに、その都度上記の設定をするのは面倒この上ありません。
ここでは、全く新しい方法で、aliasっぽい挙動を設定できる仕組みを提案したいと思います。
提案手法
既存の手法では、どれも1つのファイル内に設定を書いていました。
つまり、その設定ファイルを更新した場合、その設定ファイルを再読込みする必要がありました。
提案手法では、パスが通っている1つのディレクトリ内に設定を書いたバッチファイルやシンボリックリンクを置くようにします。
パスの中身は、コマンド実行ごとに読込むため、設定ファイルの再読込みという概念がありません。
また、パス自体は全てのシステム(コマンドプロンプトやPowerShellなど)で利用できるため、設定ファイルを複数作る必要性がなくなります。
バッチファイル
既存の手法によるalias設定が下記のようなものだとします。
alias original_command='command -option'
提案手法では、 コマンド名.bat
をファイル名にし、コマンドをファイル内容として記述します。
command -option
上記のファイルを、すでにパスを通したディレクトリ直下に置きます。
シンボリックリンク
Windowsにおける「ショートカット」をもっと柔軟にしたようなもの、と考えておけば大丈夫です。
Windowsでハードリンクやシンボリックリンクを作成する
https://qiita.com/opengl-8080/items/c2b6a93dfca5b61f9e6a
作りたいコマンド名をファイル名(拡張子無し)として、ショートカットを使いたい実行ファイルとリンクを作成します。
その際に、作りたいコマンドは、既にパスを通したディレクトリ直下に作るようにします。
例えば、 C:/commands
ディレクトリにパスを通していて、 C:/Users/Owner1/Documents/OpenSSH-Win64/ssh.exe
を ssh
コマンドとして利用したい場合、下記のようなコマンドを実行します。
mklink C:/commands/ssh C:/Users/Owner1/Documents/OpenSSH-Win64/ssh.exe
すると、 C:/commands
ディレクトリ直下に ssh
シンボリックリンクを生成します。
注意点ですが、 mklink
コマンドはコマンドプロンプト上でしか動きません。
PowerShellで利用する場合は、 cmd
コマンドを実行後に上記のコマンドを打てば、コマンドプロンプト上で実行したことになります。
exit
してPowerShellに戻りましょう。
おわりに
私はConEmu + Nyagos環境で主に開発していますが、時々コマンドプロンプトやPowerShellを使うこともあるため、複数環境の設定ファイルを作るのが面倒でした。
上記の手法を用いることで、環境非依存なパス環境を構築でき、ストレスなく開発できています(個人の感想です)。