Windows10で"ln"を使う方法

Golangは「一つのディレクトリの中に、一つの実行形式を作る」というスタイルようです。

で、そのディレクトリから、"go run ." とやるだけで、動き出すので、直感的に取扱いが良いです(まあ、好みの問題とは思います)。

├── RASSimulator
│   ├── bike.go
│   ├── cert.pem
│   ├── channel.go
│   ├── key.pem
│   ├── person.go
│   ├── real_person.go
│   ├── routing
│   │   └── librouting.go
│   ├── simulator.go
│   ├── util.go
│   └── virtual_person.go
├── REALSimulator
│   ├── bike.go
│   ├── cert.pem
│   ├── channel.go
│   ├── key.pem
│   ├── person.go
│   ├── real_person.go
│   ├── routing
│   │   └── librouting.go
│   ├── simulator.go
│   ├── util.go
│   └── virtual_person.go

で、現在、RASSimulator REALSimulator  の中身は、simulator.go 以外は、全く同じ となっていまして、simulator.go以外のファイルを変更する時は、その変更が同時に反映する必要があります(ライブラリ化するのが面倒くさい、という理由もある)。

一方のディレクトリのファイルを変更すれば、他方のディレクトリに直ちに反映されれば、良いのです。

これは、Unix系では"ln"コマンドを使えば、一発で解決する内容なのですが、これがWindows10でもできるかどうかかが分かりませんでしたが、どうやら、その方法はあるようです。

https://www.wannko.net/windows10/etc/sinlink.html

に記載がありました。

(というか、Microsoftも意地はらんと、Command.comのコマンド、全部UNIX系に全部合わせていけばいいのに、と思うんだが・・権利関係かなぁ? しかし、コマンドなんぞに権利が発生するのかなぁ?)

管理者モードでコマンドプロンプトを開いて、以下のようにフルパスで記載すると作成できるようです(私の場合フルパスで書かなかった場合失敗しました)

c:\Users\ebata\20220830rev196kai>mklink /D c:\users\ebata\20220830rev196kai\REALSimulator c:\users\ebata\20220830rev196kai\RASSimulator
c:\users\ebata\20220830rev196kai\REALSimulator <<===>> c:\users\ebata\20220830rev196kai\RASSimulator のシンボリック リンクが作成されました
ただ、このようにディレクトリを丸ごとリンクしてしまうと、ディレクトリにファイルを追加しても、他方のディレクトリにも反映されてしまって、困ったことになりました。
という訳で、面倒ですが、simulator.go以外のファイルは全て手動でリンクするようにします。
まずリンクを解除するために、REALSimulatorを削除します。
現在、こんな感じです。
c:\Users\ebata\20220830rev196kai>ls -la REALSimulator
lrwxrwxrwx 1 ebata ebata 45 Sep 5 15:53 REALSimulator -> /c/users/ebata/20220830rev196kai/RASSimulator
で、
c:\Users\ebata\20220830rev196kai>rm REALSimulator
c:\Users\ebata\20220830rev196kai>ls -la REALSimulator
ls: cannot access 'REALSimulator': No such file or directory
c:\Users\ebata\20220830rev196kai>ls -la RASSimulator
total 112
drwxr-xr-x 1 ebata ebata     0 Sep  5 15:59 .
drwxr-xr-x 1 ebata ebata     0 Sep  5 16:05 ..
-rw-r--r-- 1 ebata ebata 11551 Sep  3 20:41 bike.go
-rw-r--r-- 1 ebata ebata  1643 Jul 19 19:45 cert.pem
-rw-r--r-- 1 ebata ebata  5952 Aug 17 18:31 channel.go
drwxr-xr-x 1 ebata ebata     0 Sep  2 01:32 data
-rw-r--r-- 1 ebata ebata  1704 Jul 19 19:45 key.pem
-rw-r--r-- 1 ebata ebata 13029 Aug 28 19:50 person.go
-rw-r--r-- 1 ebata ebata  4259 Sep  3 16:33 real_person.go
drwxr-xr-x 1 ebata ebata     0 Sep  2 01:32 routing
-rw-r--r-- 1 ebata ebata 13164 Sep  5 15:58 simulator.go
-rw-r--r-- 1 ebata ebata 13163 Sep  5 15:57 simulator.go~
-rw-r--r-- 1 ebata ebata  8633 Sep  2 14:43 util.go
-rw-r--r-- 1 ebata ebata  3164 Sep  3 20:39 virtual_person.go
c:\Users\ebata\20220830rev196kai>
OK。これで、元の状態に戻っています。
では、迂遠ではありますが、simulator.go を除いたリンクを一斉に貼ります。
mklink c:\users\ebata\20220830rev196kai\REALSimulator\bike.go c:\users\ebata\20220830rev196kai\RASSimulator\bike.go
mklink c:\users\ebata\20220830rev196kai\REALSimulator\cert.pem c:\users\ebata\20220830rev196kai\RASSimulator\cert.pem
mklink c:\users\ebata\20220830rev196kai\REALSimulator\channel.go c:\users\ebata\20220830rev196kai\RASSimulator\channel.go
mklink c:\users\ebata\20220830rev196kai\REALSimulator\key.pem c:\users\ebata\20220830rev196kai\RASSimulator\key.pem
mklink c:\users\ebata\20220830rev196kai\REALSimulator\person.go c:\users\ebata\20220830rev196kai\RASSimulator\person.go
mklink c:\users\ebata\20220830rev196kai\REALSimulator\real_person.go c:\users\ebata\20220830rev196kai\RASSimulator\real_person.go
mklink c:\users\ebata\20220830rev196kai\REALSimulator\util.go c:\users\ebata\20220830rev196kai\RASSimulator\util.go
mklink c:\users\ebata\20220830rev196kai\REALSimulator\virtual_person.go c:\users\ebata\20220830rev196kai\RASSimulator\virtual_person.go
mklink /D c:\users\ebata\20220830rev196kai\REALSimulator\data c:\users\ebata\20220830rev196kai\RASSimulator\data
mklink /D c:\users\ebata\20220830rev196kai\REALSimulator\routing c:\users\ebata\20220830rev196kai\RASSimulator\routing

で、simulator.goだけは本体をコピペして、こんな感じになりました。

以上

 

 

江端さんの技術メモ

Posted by ebata