【问题标题】:Bring Terminal in the front with Ruby使用 Ruby 将终端放在前面
【发布时间】:2019-12-04 23:36:51
【问题描述】:

我在 Mac 上使用 Ruby 使用 Nokogiri 等一次打开十几个 URL。

对于每个 URL,我需要让我的 ruby​​ 程序知道 是保留 URL 窗口以供进一步检查还是关闭它。

但我看不到终端窗口及其提示,它隐藏在后面 最后一个 URL 窗口。

我必须单击终端窗口才能将其置于前面,以便在键盘上输入我的决定。

puts "close webpage?"
if gets =~ /^y/i then 1 ; else; 0; end;

我希望终端窗口在提示之前出现在前面 求个答案。

我认为问题有两个方面

  1. 是否有一个终端命令告诉终端窗口变成 可以与 mac iTerm 一起使用的活动的(前面的)。

Apple 脚本“bringiTermtofront”在 applescript 编辑器中工作。

tell application "iTerm" to activate
  1. 有没有办法从 ruby​​ 执行终端命令。 红宝石代码

    系统“osascript BringiTermtofront.scpt”

将 iTerm 置于最前面。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请参阅“How to Ask”以及链接页面和“mcve”。我们想知道您尝试打开终端窗口或执行命令的操作。如果没有这些信息,您似乎没有尝试过并希望我们为您找到或编写教程,这是题外话。

标签: ruby macos terminal prompt


【解决方案1】:

对于问题 1,一种方法是编写一个 Applescript 来处理开关,然后使用终端命令 osascript 从您的 Ruby 代码中运行它。您还可以检查 rb-appscript 是否仍然可用(它不再受支持,但可能有效)。

对于问题 2,您有几个选择。如果要将命令的结果存储在变量中,则在命令周围使用反引号可以捕获简短命令的输出。 (例如,使用 grep 或类似的东西)。

不过,Kernel 中的 system 方法可能是您的最佳选择,因为它会像在终端一样执行 shell 命令。

根据显示您正在使用的脚本的编辑,您需要将脚本作为 Applescript 执行,而不是作为终端脚本执行。您甚至不需要单独的文件,因为它只是一行。这将是:

command = %q[osascript -e "tell application \"iTerm\" to activate"]
system(command)

您也可以将 Applescript 放在一个文件中并使用 just 执行它

system("osascript bringiTermtofront")

有关如何与这些方法交互的更多帮助,请参阅“Running shell commands from Ruby”。

【讨论】:

  • 解释如何使用grep,如果您认为这是将结果存储在变量中的有效选项,因为grep 是操作系统中的命令和Ruby 中的方法。
  • 我只是将其作为一个示例,它给出了可以存储在变量中的结果,而不是捕获输出没有那么有用的终端命令。
  • 如需更多地控制来自 Ruby 的 I/O 到外部命令,请参阅open3 文档。它非常强大。
猜你喜欢
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2010-11-08
  • 2019-03-28
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多