命令完成后有没有办法将终端带到前面?

时间:2016-11-26 04:32:46

标签: macos terminal zsh

有没有办法在命令运行完毕后强制终端成为活动窗口?

在运行冗长的命令或脚本以便在完成时以某种方式通知它将非常有用。

或者,我可以在每次命令完成时通过macOS发送通知吗?

2 个答案:

答案 0 :(得分:4)

在macOS 10.8+上,AppleScript支持display notification命令显示通知(可选择声音)。

以下是一个示例,使用sleep 3表示长时间运行的shell命令:

sleep 3; osascript -e 'display notification "Done!" with title "Long-running shell command" sound name "Hero"'

您可以将此功能包装在shell函数中,并将其添加到~/.zshrc文件中:

notifyWhenDone() {
  local msg=${1:-'Done!'} title=${2:-'Long-running shell command'} sound=${3:-'Hero'}
  osascript -e 'display notification "'"$msg"'" with title "'"$title"'" sound name "'"$sound"'"'
}

注意:为了使其完全健壮,您必须确保可选参数$1$2$3的内容不会破坏AppleScript命令。

使用此功能:

sleep 3; notifyWhenDone

如果您还想在完成时激活 Terminal.app,请将以下选项附加到传递给osascript的参数中:
-e 'activate application "Terminal"'

答案 1 :(得分:2)

另一件需要注意的事情是:如果某个东西在终端窗口或标签中发出哔哔声或响铃,当它在后台时,它会反弹其Dock图标并用这些哔哔声或铃声标记它。切换到受影响的窗口或选项卡时,徽章会被清除。

在bash中,您可以使用echo ^V^G(即Control-V,Control-G),echo -n $'\a'printf "\a"中的任意一个发出哔哔声。不知道zsh。