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窗口进程占用提示(不提示,直接退出);
}