Cygwin重载当前窗口的办法


通常情况下,我们需要关掉窗口再重新打开。一来一去,略显麻烦,同时桌面和窗口的频繁切换也浪费了不少时间;能否在Cygwin窗口输入一个命令,就能达到自动关闭并重新打开Cygwin窗口的效果呢,可以,参看如下方法,需要重新打开Cygwin窗口时,输入reload回车即可,窗口便会自动退出并重新打开,同时保持工作目录不变,不用再去cd xxx切换工作路径;

reload() {
###重载:关闭并重新打开当前Cygwin窗口
targetPath=$(pwd|cygpath -w -f-)
scriptContent=$(cat </tmp/reload-cygwin.bat
	chmod a+rx /tmp/reload-cygwin.bat
	iconv -s -f UTF-8 -t GBK /tmp/reload-cygwin.bat|tee /tmp/reload-cygwin.bat &>/dev/null
	#替换Linux换行符为Windows换行符,必须;否则会出现某些情况下无法启动Mintty窗口
	sed -i -r 's/$/\r/' /tmp/reload-cygwin.bat
	echo "Done..."
	cmd /c start "" "`echo '/tmp/reload-cygwin.bat'|cygpath -w -f-`"
	#(exec -c /bin/bash --login -i -c "cmd /c start \"\" \"`echo '/tmp/reload-cygwin.bat'|cygpath -w -f-`\"" &)
	#(exec -c cmd /c start "" "`echo '/tmp/reload-cygwin.bat'|cygpath -w -f-`")
	eval exit 0
}

附:不重新打开Cygwin窗口,但刷新内置函数、.bash_profile用户配置和环境变量的办法refresh-env:

##重新加载用户配置,刷新环境变量等
refresh-env(){
	#新增和修改函数和变量时有用,如果删除了某函数和某环境变量,想要生效请使用reload
	#2020-11-06修改:source文件前,先移除所有已经设置的函数和变量,现在即便你删除了某函数,也不用手动reload了
	eval unset -f `declare -F|awk '{print $NF}'|grep -vE '^_'|tr '\n' ' '` #删除已定义的函数,名称以_开头的为私有定义和只读变量,忽略之
	eval unalias -a ##删除所有已定义的alias
	eval . ~/.bash_profile >/dev/null
	eval . ~/.bashrc >/dev/null
	echo -e "refresh-env done..."
}
alias re='refresh-env'