Есть ли способ узнать параметры команды / приложения оболочки / терминала? - PullRequest
3 голосов
/ 18 января 2012

Я хотел бы знать, есть ли способ получить параметры, используемые командой или приложением (без ввода вручную. Например:

Для приложения 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 ]

5 голосов
/ 18 января 2012

Для любого произвольного приложения это невозможно, поскольку параметры argv, переданные в функцию программы main() (на языке C), могут быть сохранены, проанализированы и доступны любым способом, который требуется программе. Он может даже записать параметры в файл, а затем прочитать файл, когда захочет узнать, какие опции использовать.

Однако похоже, что параметры командной строки уже задокументированы. От CocoaDev :

ScreenSaverEngine поддерживает некоторые специальные флаги командной строки, чтобы помочь в отладке:

-background - все окна заставки появляются за всеми остальными окнами (за значками Finder, но перед изображением на рабочем столе). Функции пароля и гамма-затухания отключены. Не выйдет на активность мыши или клавиатуры.

-debug - Подобно -background, за исключением того, что движение мыши по рабочему столу приводит к его выходу. Очень удобно при запуске ScreenSaverEngine в GDB. (Попытка обойти мой компьютер в этом режиме, не вызывая его выход напоминает мне о том, что я играю в «Не трогай пол» в детстве)

-module - загружает указанный модуль, а не модуль, указанный пользователем по умолчанию. принимает те же значения, что и узел moduleName в ~ / Library / Preferences / ByHost / com.apple.screensaver. *. plist Для Например, Flurry, Abstract или Spectrum. Кажется, он не принимает однако, полные пути или URL-адреса к файлам .saver, .slideSaver или .qtz, поэтому необходимо разместить нужный модуль в одном из типичных Папки ScreenSaver и ссылки на них без расширения имени файла.

-window - дополнительная команда запускает заставку в окне.

это можно комбинировать с -background. пример: -window -background

1 голос
/ 15 апреля 2018

Не уверен насчет точности результата.Но это логично.

Я пошел вперед и посмотрел, чтобы ответить на этот вопрос, потому что яблоко сломало флаг-background с High Sierra.По-прежнему проблема с High Sierra 10.13.4

Это был мой компьютер под управлением Sierra 10.12.16, исполняемый файл тот же, но в другом месте для HighSierra.

заставить это работать.ScreenSaverEngine - это исполняемый файл.

Strings - это команда, которая объединяет все, что выглядит как английский.Мне нужно cat файл, чтобы получить строку вывода, потому что по умолчанию он читается как двоичный файл и не дает никакого результата.

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

Я вручную просмотрел файлы, но вы могли бы добавить это, чтобы увидеть файлыВ конце концов я заметил:

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

Затем я заметил, что программа вызывает этот Versions / A / ScreenSaver

cat /System/Library/Frameworks/ScreenSaver.framework/Versions/A/ScreenSaver | strings

Я просмотрел и обнаружил раздел Аргументы.

payoff: arguments

  • -idleCheck
  • -cornerCheck
  • -debug
  • -window
  • ss-windowed-mode = 1
  • -numWindows
  • -background
  • -foreground
  • -loginWindow
  • -mainOnly
  • -module
  • -lockDelay
  • floatValue
  • -black
  • -noEarlyMouseCheck
  • аргумент "% @" не понятен
  • Фоновый режим отключен, так как было обнаружено полноэкранное приложение.

Не знаю, почему нет официальной документации.

1 голос
/ 07 февраля 2014

Вот скрипт, который я хотел бы добавить в мой путь:

#!/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 "$@"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...