我正在尝试设置一个简单的脚本来在后台运行的 cron 作业上运行,并使用命令通知任何打开的终端结果wall
。然而,在测试时,我根本没有得到任何输出。我通过 Microsoft 的终端应用程序使用 WSL Ubuntu 和 zsh。
运行tty
并w
返回以下内容,而who
什么也不返回。
hardya@GBH-HARDYA1 ~ tty
/dev/pts/4
hardya@GBH-HARDYA1 ~ w
09:16:01 up 3 days, 4:30, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
有任何想法吗?
答案1
@EdgarMagallon 的评论中有两点是正确的:
- 这是
who
与上面提到的命令问题相关询问 Ubuntu - 该答案的所有者(我)将...;-)
好的,是的,该命令似乎确实使用与确定登录用户及其终端wall
相同的机制。who
因此要让它在 WSL2 下工作:
您需要最新版本的 WSL,该版本在
wsl --version
.如果返回invalid command
,请确保您的 Windows 已完全更新,然后安装新版本Linux 的 Windows 子系统来自微软商店。启用 Systemd,如中所述这个答案
重新启动 WSL 并确认 Systemd 已启用后,运行
su - $USER
以强制用户“登录”。然后,在另一个终端中,您可以运行:
sudo wall Wallaby # Or a real message
它应该显示在登录的终端中。请记住,这
sudo
是许多发行版所必需的。曾经是这样wall
在setguid
Ubuntu 和 Debian 上,但情况似乎不再如此了。w
并且who
还应该显示您的登录用户。
当然,这并不一定能帮助您实现所需的脚本,因为 WSL 不会力量登录。一些可能性:
强制
su - $USER
登录您想要接收通知的 shell。编写一个 Zsh 提示函数来监视文件(或者可能是 fifo?)并使用“完成”信息更新提示(直到清除)。请注意,我发现这在 Fish 中更容易,但我确信在 Zsh(甚至 Bash)中也是可能的。
tmux
在您的终端中运行并用于tmux display-message
通知比赛。