Cygwin一键关闭mintty窗口函数:stop-mintty(软关闭,非强制结束进程)

stop-mintty,对所有mintty窗口发送关闭命令,Cygwin或WSL、MSYS2等环境均可用,非强制结束进程;
好处在于:使用此函数关闭窗口前,Bash会自动将关闭的窗口执行过的命令写入历史文件.bash_history,方便下次重开窗口时进行历史命令搜索(上下箭头,Ctrl+R等),如果使用结束进程命令关闭窗口,本次窗口中运行过的历史命令是不会记录下来的。相当于对任务栏所有mintty窗口一一按下ctrl+D快捷键登出;


此功能实现依赖第三方命令行工具cmdow:

cmdow:
https://ritchielawrence.github.io/cmdow/

stop-mintty() {
	#关闭Cygwin mintty窗口,软结束Cygwin mintty程序
	#相比强制结束进程的好处,软结束进程退出前可以把当前窗口执行过的命令写入.bash_history,保留历史命令
	#本程序退出所有Mintty窗口(有几个窗口就退出几个(等同于依次对窗口按键Ctrl+D))
	#local winHandle=$(cmdow /T /F|dos2unix -q|iconv -f GBK -t UTF-8|grep 'mintty'|awk '{print $1}')
	local winHandle=$(cmdow /T /F|dos2unix -q|iconv -f GBK -t UTF-8|grep 'mintty'|grep -v 'MINGW64:'|awk '{print $1}') #排除 Git Bash窗口
	local selfWindow=""
	for win in ${winHandle[@]};
	do 
		#数组第一个句柄刚好是当前执行命令的窗口,故应放在流程最后发送关闭指令
		if [ -z "$selfWindow" ];then
			selfWindow="$win"
		else
			echo "关闭窗口句柄: $win"
			cmdow $win /CLS
		fi
	done
	#以下对最后一个mintty窗口(当前执行stop-mintty命令的窗口)进行操作!
	#[ ! -z "$selfWindow" ] && cmdow $selfWindow /CLS #如果使用这行会弹出窗口被进程cmdow占用,是否强制退出;
	[ ! -z "$selfWindow" ] && cmd /c start cmdow $selfWindow /CLS #使用cmd启动新进程,绕过最后一个mintty窗口进程占用提示(不提示,直接退出);
}

运行效果:

posted @ 2022-03-18 06:16  晴云孤魂  阅读(104)  评论(0编辑  收藏  举报