Macos 如何检查mac bash应用程序启动时是否按下了选项键

Macos 如何检查mac bash应用程序启动时是否按下了选项键,macos,bash,startup,Macos,Bash,Startup,我有一个相对简单的问题 我有一些mac应用程序的启动器是用bash编写的。 我想为启动器添加一个小功能,让其他人在启动应用程序时按“option/alt”键时访问config.app或位于/Contents/Resources中的其他内容。有点像iTunes或iPhoto,您可以访问一个小的选项菜单 我不知道纯在bash中的代码应该是什么样子;我发现了一些使用applescript和/或cocoa钩子的示例,但没有一个完全在bash中使用 类似于:if'optionKeyDown';然后打开“$

我有一个相对简单的问题

我有一些mac应用程序的启动器是用bash编写的。 我想为启动器添加一个小功能,让其他人在启动应用程序时按“option/alt”键时访问config.app或位于/Contents/Resources中的其他内容。有点像iTunes或iPhoto,您可以访问一个小的选项菜单

我不知道纯在bash中的代码应该是什么样子;我发现了一些使用applescript和/或cocoa钩子的示例,但没有一个完全在bash中使用

类似于:
if'optionKeyDown';然后打开“$WORKDIR/。/Resources/config.app”


或者这在纯bash中根本不可能吗?

这里有一个很好的解决方案:

以下面的代码为例:

#import <Carbon/Carbon.h>

int main (int argc, const char * argv[]) {
    unsigned int modifiers = GetCurrentKeyModifiers();

    if (argc == 1)
        printf("%d\n", modifiers);

    else {

        int i, result = 1;
        for (i = 1; i < argc; ++i) {

            if (0 == strcmp(argv[i], "shift"))
                result = result && (modifiers & shiftKey);

            else if (0 == strcmp(argv[i], "option"))
                result = result && (modifiers & optionKey);

            else if (0 == strcmp(argv[i], "cmd"))
                result = result && (modifiers & cmdKey);

            else if (0 == strcmp(argv[i], "control"))
                result = result && (modifiers & controlKey);

            else if (0 == strcmp(argv[i], "capslock"))
                result = result && (modifiers & alphaLock);

        }
        printf("%d\n", result);
    }
    return 0;
}

可执行文件放在路径中的某个位置,例如
/usr/local/bin
,甚至与bash脚本放在同一目录中,然后您可以将其称为
键选项
并检查返回的字符串中的“0”或“1”。

谢谢。可执行文件本身似乎输出了按下的键的具体数目,比如选项是2048。如何在bash中使用if语句直接实现这一点?我试过这个,但似乎有些问题:keys=“$WORKDIR/keys”if[['keys option'='1']]@devilhunter:如果您没有传递
选项
参数,它只返回2048 for option,即如果您只是将其称为
而不是
键选项
。从Terminal中的命令行尝试一下,看看它是如何工作的。
$ gcc keys.m -framework Carbon -o keys