Как я могу обнаружить нажатие кнопки, сообщаемое osascript в вызывающей оболочке? - PullRequest
0 голосов
/ 06 февраля 2020

В настоящее время я работаю над сценарием, чтобы уведомить пользователя, когда истечет срок его пароля. Появляется подсказка, но независимо от того, какую кнопку я нажимаю, она приводит к одинаковому результату «Выбрано позже». Есть идеи?

#!/bin/bash
button=$(osascript -e 'tell application "System Events" to display dialog "Change password now or later?" buttons {"Change Later", "Change Now"} default button 1 with title "Password Update Required" with icon caution')

if [[ $button = "Change Now" ]]; then
    open /System/Library/PreferencePanes/Accounts.prefPane
    echo "Opening Preferences"
else
    echo "Change Later was chosen"
    exit 0
fi

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Также стоит учесть, что вы можете выполнить проверку, которая определяет, какая кнопка была нажата в части кода AppleScript, что в некотором смысле имеет больше смысла, так как вы можете открыть Системные настройки с этим тоже:

#!/usr/bin/env bash
osascript << OSA 2>/dev/null && exit 0 || echo "Change Later was chosen"
display dialog "Change password now or later?" buttons ¬
        {"Change Later", "Change Now"} default button 1 ¬
        with title "Password Update Required" with icon caution

if the button returned of the result ¬
        is "Change Later" then error

tell application id "com.apple.SystemPreferences"
        reveal pane id "com.apple.preferences.users"
        repeat until the id of the current pane is ¬
                "com.apple.preferences.users"
                delay 0.5
        end repeat
        activate
end tell
OSA

Здесь, вместо сохранения результата сценария в переменную, состояние выхода osascript отражает выбор пользователя: «Изменить позже» завершается osascript с ошибка, возвращающая статус выхода 1; «Изменить сейчас» позволяет сценарию продвигаться вперед и открывает Системные настройки на панели Users & Groups перед возвратом состояния выхода 0.

0 голосов
/ 06 февраля 2020

osascript не просто выводит название кнопки, которую вы нажали; он выводит более «описательную» строку с префиксом button returned:. Вы должны учесть это в своем чеке:

if [[ $button = "button returned:Change Now" ]]
...