有没有办法知道shell / terminal命令/应用程序的选项?

时间:2012-01-17 22:27:12

标签: macos shell configuration terminal customization

我想知道的是,如果有任何方法可以获得命令或应用程序使用的选项(没有手动输入。例如:

应用程序 ScreenSaverEngine ,位于:

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/

-background 选项,允许我将当前屏幕保护程序设置为桌面背景。

./ScreenSaverEngine -background

现在我想用这个应用程序做其他的事情,或者至少我想知道是否有可能做其他事情。所以我想知道 ScreenSaverEngine 的所有其他选项。我想也许在应用程序中编写了一些选项,所以我尝试了类似

的内容
strings ScreenSaverEngine | grep "-"

但没有结果。 ScreenSaverEngine 没有手册,所以

man ScreenSaverEngine

无济于事。我很乐意提出任何建议: - )。

(顺便说一句,我使用的是MAC OS X)。

3 个答案:

答案 0 :(得分:4)

对于任何任意应用程序,这是不可能的,因为传递给程序的argv函数(在C中)的main()参数可以以程序所需的任何方式进行存储,解析和访问。它甚至可以将参数写入文件,然后在想知道要使用哪些选项时读取该文件。

但是,看起来已经记录了命令行选项。 来自CocoaDev

  

ScreenSaverEngine支持一些特殊的命令行标志来帮助   在调试中:

     

-background - 所有其他窗口后面都显示所有屏幕保护程序窗口(在Finder图标后面,但在桌面图像前面)。该   密码和gamma淡入淡出功能已禁用。它不会退出   鼠标或键盘活动。

     

-debug - Like -background,除了桌面上的鼠标移动导致它退出。在运行ScreenSaverEngine时非常方便   GDB。 (尝试在此模式下绕过我的计算机而不会导致它   退出让我想起了小时候不要触摸地板)

     

-module - 加载指定的模块而不是用户默认值指定的模块。接受与〜/ Library / Preferences / ByHost / com.apple.screensaver中的moduleName节点相同的值。*。plist For   例如,Flurry,Abstract或Spectrum。它似乎不接受   但是,.saver,.slideSaver或.qtz文件的完整路径或URL   有必要将所需的模块放在一个典型的模块中   ScreenSaver文件夹并引用它而没有文件扩展名。

-window - 一个附加命令在窗口中运行屏幕保护程序。

  

这可以与-background结合使用。示例:-window -background

答案 1 :(得分:1)

这是我喜欢放在我的路径中的脚本:

#!/bin/bash

usage() {
    echo "usage: $0 [options]"
    echo "  -background  Screen saver windows appear behind all other windows"
    echo "  -debug       Like -background, except mouse movement over the"
    echo "                 desktop causes it to exit"
    echo "  -module      Loads the specified module by name"
}

engine=/System/Library/Frameworks/ScreenSaver.framework/Resources\
/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

while getopts "hbackgrounddebugmodule" opt; do
    case "${opt}" in
        h)
            usage
            exit 0
            ;;
    esac
done

$engine "$@"

答案 2 :(得分:1)

不确定结果的准确性。但它具有逻辑意义。

我继续寻找回答这个问题,因为苹果打破了这个问题 与高山脉的背景旗帜。仍然是High Sierra 10.13.4的问题

这是来自运行Sierra 10.12.16的我的mac,可执行文件是相同的,但它位于HighSierra的不同文件位置。

所以要做到这一点。 ScreenSaverEngine是一个可执行文件。

字符串是一个可以让任何看起来像英语的东西。 我需要捕获文件以获取字符串输出,因为默认情况下它读取为二进制并且不提供任何结果。

MyClass::foo

我手动查看了这些文件,但你可以添加它来查看我最终注意到的文件:

cat /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine | strings

然后我注意到程序正在调用这个版本/ A / ScreenSaver

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine | strings | grep /System

我手动浏览并发现了Arguments部分。

收益: 参数

  • -idleCheck
  • -cornerCheck
  • -debug
  • -window
  • β-窗模式= 1
  • -numWindows
  • -background
  • -foreground
  • -loginWindow
  • -mainOnly
  • - 模
  • -lockDelay
  • 的floatValue
  • -black
  • -noEarlyMouseCheck
  • 论证'%@'不明白
  • 后台模式已禁用,因为全屏应用程序已启用 检测。

不知道为什么没有官方文件。