WSL2 的 IP 不固定好烦啊,提供一个临时方案
資深大佬 : szq8014 7
尝试绑定 IP 结果一重启就回到解放前,只能是想一个其它办法来绕过,毕竟 IP 可变,但是 hostname 可以固定不变。
每次在 wsl 启动后把 ip 更新到 windows 的 etc/hosts 文件里面不就行了? 就按这个思路来。
已知
- powershell 中的命令可以实现 windows hosts 内容修改
- wsl –exec 可以直接执行 wsl 中的命令
- 整篇无图
组合一下
# 拿到 wsl 的 ip 地址 $ipLine = wsl --exec ip -a a | findStr inet | findStr eth0 $wslIP = $ipLine.trim().split(" |/")[1] echo "WSL new ip is: " $wslIP # 写入 etchosts 文件中 $hostsPath = "$env:windirSystem32driversetchosts" if($wslIP) { $newHosts = Get-Content $hostsPath | Foreach {if ($_ -match '^s*([^#].*?d{1,3}.*?wsl.*)') { $wslIP + " wsl"} else {$_}} echo $newHosts $newHosts | Out-File $hostsPath -enc ascii }
保存到 test.ps1 文件中运行即可。
结果: 成功
开心。
补充
- 上面脚本中假定我的 hosts 中 wsl 的 hostname 就是 wsl 。
- wsl 中网卡是 eth0 。
- wsl –exec 使用的是默认发行版,如果其它发行版则需要 -d 指定
- 想直接在 wsl 中写脚本来修改 /mnt/c/Windows/System32/drivers/etc/hosts 会 Permission Denied. ps: sudo 也不行
- test.ps1 右键默认没有 “以管理员身份运行” ,所以得再想个办法。。
- 办法就是再写一个 .bat 文件。。。
- 文件内容就一行 powershell.exe $your_ps1_file_path 保存文件,右击运行就行了
- 有点遗憾,需要每次手动运行一个脚本才行,但是主自己已经挺满意了
再次补充
此脚本仅提供一个思路,如果能运行是最让人开心的,如果不能需要调整一下脚本中具体的关键词,如 eth0, wsl 等等
大佬有話說 (5)