【问题标题】:Mac OS: Script that does something, then starts an Application, then waits until it terminates, and finally does something?Mac OS:做某事的脚本,然后启动一个应用程序,然后等到它终止,最后做某事?
【发布时间】:2017-09-08 18:15:28
【问题描述】:

在 Mac OS 上,是否可以创建一个 Automator/Bash/Java/ApplieScript 来运行 bash-command 来执行某些操作(例如屏幕分辨率) 然后运行应用程序(例如需要特定屏幕分辨率的游戏)然后等到应用程序终止,然后再做最后一件事(例如再次更改屏幕分辨率)

我尝试使用所有 Automator、Bash、Java 和 ApplieScript。我什至尝试将它们中的多个组合成一个运行其他东西的东西链,只是为了运行其他东西,直到它终止然后运行其他东西,但这些东西都不能正常工作。

我得到了改变屏幕分辨率的终端命令,也得到了运行游戏的终端命令,但我无法将它们组合成一个逻辑正确的事件链......

命令是:

do shell script "/Volumes/Sierra/Users/xyz/Documents/cscreen -x 1600 -y 900 -r 60"
do shell script "open steam://run/8930"
do shell script "/Volumes/Sierra/Users/xyz/Documents/cscreen -x 1280 -y 720 -r 60"

【问题讨论】:

  • 为此目的——监控进程——你需要一个运行循环,例如一个轻量级的Cocoa或AppleScriptObjC应用程序,它使用NSWorkspace通知来监控游戏应用程序。
  • 你能解释一下它是如何工作的或者给出一个代码示例吗?
  • 轻量级的应用程序是最好的。但您也可以使用 applescript 应用程序来完成。使用空闲循环等待游戏结束。
  • 我的意思是在 Xcode 中创建的一个小应用程序。另一种选择——AppleScript 应用程序轮询更改,即使使用 idle 处理程序——在 CPU 方面要昂贵得多
  • 从 shell 脚本运行 3 个命令时会发生什么?例如没有任何do shell script - 只是顺序的3个终端命令......它有效吗?如果是,你不需要任何 Xcode 事件编程废话..

标签: bash macos shell applescript automator


【解决方案1】:

你想要的是 open 的 -W 参数:

-W 使 open 等到它打开的(或已经打开的)应用程序退出。与 -n 一起使用 标志以允许 open 作为 $EDITOR 环境变量的适当应用程序。

所以在你的例子中,我会写一个这样的脚本:

#!/bin/bash

/Volumes/Sierra/Users/xyz/Documents/cscreen -x 1600 -y 900 -r 60
open -W steam://run/8930
/Volumes/Sierra/Users/xyz/Documents/cscreen -x 1280 -y 720 -r 60

现在 open 在 steam 退出之前不应将控制权返回给 shell。

【讨论】:

  • 这看起来很完美——虽然我还没有测试过。
猜你喜欢
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多