【问题标题】:Taking screen shot of current OS X or iTerm terminal window截取当前 OS X 或 iTerm 终端窗口的屏幕截图
【发布时间】:2013-08-17 00:30:54
【问题描述】:

在 Linux 中,我使用 imagemagick import -window $WINDOWID 来截屏终端。

在 OS X 中有类似的东西吗?

【问题讨论】:

  • 从技术上讲,WINDOWID 是由您的 X 服务器设置的,并且确实可以在(例如)在 XQuartz 下运行的 xterm 中使用。至少,答案取决于您使用的终端模拟器。
  • 理想情况下,我希望同时支持 iterm2 和默认终端。
  • 脚本试图用窗口 ID 做什么? Quartz 窗口 ID 确实存在,但没有简单的方法可以从终端会话中获取一个,即便如此,我怀疑它对您的 bash 脚本有用。
  • @NicholasRiley 我正在使用 imagemagick import -window $WINDOWID 截屏。
  • 好的,我现在回答了你的问题 :-)

标签: macos bash environment-variables


【解决方案1】:

试试tty 命令。

$ tty
/dev/ttys001

您可以使用 `ps -t 来查看该终端上正在运行的命令:

$ ps -t s001  #Where `tty` returns /dev/ttys001

你也可以试试pgrep

$ pgrep -t s001

编辑(你可以/我可以)

哦,这是为了截屏...不在 OP 中。

$WINDOWID 是 X11 事物,imagemagick 也是。 Linux GUI(KDE 和 Gnome)基于 X11 协议。 Mac GUI 不是。

在 Mac OS X 上,有一个 screencapture 命令。没用过,看一下manpage:

截屏实用程序至今没有很好的文档记录。

你自己一个人。

还有一个技巧...

您可以在 Mac 上运行 X11 服务器。 The server is no longer included in Mountain Lion,但 Apple 建议您从 XQuartz Project 安装它。

您可以运行 X11 服务器,然后使用 XTerm 窗口,它的 Windows ID 可以与imagemagick 一起使用。

【讨论】:

  • 第一个终端名称应该是ttys000,如果有一个终端标签,通常返回No such file or directory
  • 我打开了第二个选项卡并在那里运行了一个进程,所以我可以在第一个选项卡上看到它。这就是为什么我有s001 而不是s000 我的建议是使用tty 命令来查看您的终端ID,然后您可以使用它来查找您的进程。我将更新我的答案以使其更加明显。
  • 给定 tty 如何识别 GUI 窗口?
  • OP 询问需要知道 终端的窗口 ID 的“bash 脚本 > 它正在运行”。那是一个tty。知道这将有助于 BASH 脚本识别自己,因为它可以通过 tty 的名称限制通过 pspgrep 显示的进程。
【解决方案2】:

您希望使用 screencapture 而不是 import,后者仅适用于 X11 窗口。

如果窗口在前面,可以试试:

screencapture -l$(osascript -e 'tell app "Terminal" to id of window 1') test.png

有关更多背景信息,请参阅this 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2018-11-13
    相关资源
    最近更新 更多