WSL中执行命令结束后发送一个Windows系统通知
需求场景:本人使用 Windows 10 操作系统,终端为 WSL(Windows Subsystem for Linux) 就是一个 Linux 子系统,可以运行各种 Linux命令,当我用 wget 下载一个大的文件的时候,可能要等很久,但是我不知道什么时候会下载完,这时候需要他完成之后给我发一个通知,这个通知在原生 Linux 和 Mac 上是比较容易的,这里说一下在 Windows 下的设置。
Linux 子系统默认是 Ubuntu,网上也又教程可以安装其他系统,比如我试过 Arch。终端我没有使用 bash
,比较喜欢 fish
,有一个 omf(Oh My Fish) 插件系统,有各种插件和主题。
安装 done
要在命令执行结束发一个通知,需要一个插件:https://github.com/fisherman/done
这个插件是用 fisherman 来安装的,但是我用的 omf,所以需要手动安装一下。
1 | curl -Lo ~/.config/fish/functions/humanize_duration.fish --create-dirs https://raw.githubusercontent.com/fisherman/humanize_duration/master/humanize_duration.fish |
安装 BurntToast
然后需要在 Windows PowerShell 里面执行如下命令:
1 | PS C:\WINDOWS\system32> Install-Module -Name BurntToast |
不受信任的存储库
你正在从不受信任的存储库安装模块。如果你信任该存储库,请通过运行 Set-PSRepository cmdlet 更改其 InstallationPolicy
值。是否确实要从“PSGallery”安装模块?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”):
我选择 A,然后就安装好了 BurntToast。
配置 fish
最后在 ~/.config/fish/config.fish
里面加入下面的配置:
1 | set -U __done_min_cmd_duration 5000 # 执行时间超过多少 ms 需要发送通知,default: 5000 ms |
然后重新进入 fish,执行 sleep 6
,6s之后就能收到通知啦!