解决重启电脑后WSL/WSL2虚拟机IP地址变换的问题(非标题党)

看到很多人已经给出了方法,但是所有已知方法都在Windows内进行,不符合虚拟机的理念。下面给出一种快捷且不影响Windows的方法。

下面的方法仅适用于简单的配置要求,例如bashrc、zsh、git、vim插件和其他可通过linux内配置文件完成的设置。如果你的任务需要在Windows程序内设置地址,这个方法并不适用

在.bashrc/.zshrc中,将相关行替换为:

HOST=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
~~export DISPLAY=$HOST:0.0~~ 
export http_proxy="http://$HOST:10010/"
git config --global http.proxy http://$HOST:10010
git config --global https.proxy https://$HOST:10010

把10010改成你的代理端口。

其他文件也同理,例如apt-get配置代理,标准方法是在/etc/apt/apt.conf中插入

Acquire::http::Proxy "http://127.0.0.1:8087";

这样一行。
只需要写个shell/python脚本删除这行或者用正则表达式替换这行的ip地址即可。推荐使用python;
可以将脚本放在/etc/rc.d/rc.local或者.bash_profile中,让它登录后执行;
如果需要sudo权限,使用管道符连接标准输出和sudo命令,让python/shell自动输入sudo密码。例如

# -*- coding: utf-8 -*-
"""
仅作示例。看懂逻辑就行。
"""
import os
config_files = [] #将要修改的文件的绝对地址以字符串形式加入这个列表
to_change_line = [] #将要替换的行的关键词以字符串形式加入这个列表,例如'proxy'
PSWD = '歪比歪比,歪比巴卜' #以字符串形式保存sudo密码到这
host_address = os.popen(r"cat /etc/resolv.conf | grep nameserver | awk '{print $2}'").read()

for i in len(config_files):
	cfile = config_files[i]
	old_proxy = to_change_line[i]
	file_cache = r''
	os.popen(f'echo "{PSWD}" | sudo -S cp {cfile} {cfile}.backup').read()
	with open(cfile, r) as c:
		one_line = c.readline()
		if old_proxy in one_line:
			one_line = one_line.replace(old_proxy, host_address)
		file_cache += one_line
	with open(cfile, w) as c:
		c.write(file_cache)
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值