Я хочу, чтобы это основывалось на ОС, поэтому мне не нужно подключение к интернету или открытый браузер и т. Д. Просто то, что может происходить в фоновом режиме
Самый простой способ сделать это - с приложением, но вот как это сделать только с помощью встроенных команд ОС. Я знаю, что вы хотите, чтобы он был управляемым событиями, но я не уверен, как это сделать, так что вот один из способов проверить уровень заряда батареи, а затем сделать что-то еще, если он выше / ниже порога.
Вы можете рассмотреть launchd
процесс, это в основном запланированное задание, которое выполняется каждую x
минуту. Они часто используются опытными пользователями, но не слишком сложны в настройке. Вы конфигурируете запланированную задачу launchd с помощью файла .plist, который вы помещаете в этот каталог: Macintosh HD\Library\LaunchDaemons
именно так вы структурируете файл .plist;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Если вы сохраните этот файл, как com.me.BatteryInfo
в LaunchDaemons
указанной выше папке, он создаст запланированное задание, которое будет запускаться каждые 30 минут. 1800
Непосредственно над числом указывается </dict>
время в секундах того, как часто вы хотите запускать задачу. Здесь указано <string>/Users/yourusername/batt.sh</string>
, где вы указываете, какой скрипт запускается по расписанию. Вы должны уйти <string>
и остаться </sting>
нетронутыми.
Строка <string>com.me.BatteryInfo</string>
- это уникальное имя запланированной задачи. Если вы собираетесь создать более одного, убедитесь, что каждый .plist имеет здесь уникальное имя.
Следующее, что вам нужно сделать, это изменить владельца .plist на root
. Это требуется в качестве функции безопасности (я полагаю, чтобы остановить программное обеспечение / пользователей, создающих запланированные вредоносные задачи). Чтобы изменить владельца файла, выполните sudo chown root \Library\LaunchDaemons\yourtask.plist
(замените yourtask.plist фактическим именем файла .plist, который вы создали). Эта задача предложит вам ввести пароль.
Теперь вам нужно создать скрипт, который будет периодически запускаться. Вам нужно создать файл .sh (скрипт bash), чтобы сообщить компьютеру, что делать. Чтобы создать файл .sh, откройте текстовый редактор для программистов, например Sublime Text или Komodo Edit . НЕ используйте Text Edit, так как он часто добавляет текст к вашим файлам, что будет мешать вашему сценарию. Редактирование текста на самом деле не должно использоваться для кода.
Создайте скрипт (файл .sh) со следующим кодом;
#!/bin/sh
percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')
if [ $percent > 95 ]
then
echo 'charged.'
fi
exit 0
Замените echo 'charged.'
на команду терминала, которую вы хотели бы выполнить, когда батарея заряжена. open /Applications/Notes.app
откроет приложение Notes; Вы можете изменить каталог, чтобы открыть другое приложение.
$percent > 95
Это говорит о том, что следующая строка должна работать только тогда, когда батарея более чем 95
заряжена. Вы можете изменить это на что угодно. Уровень заряда батареи здесь часто будет немного отличаться от того, что отображается в строке меню вверху. Если вы хотите «работать, когда батарея полностью заряжена», я рекомендую оставить значение> 95 . Если вы хотите, чтобы задание запускалось, например, когда батарея опустилась ниже 20%, измените ее на$percent < 20
ПРИМЕЧАНИЕ. Поскольку это запланированное задание, ваш сценарий будет выполняться каждые x
несколько минут. Это означает, что если вы поместите open \Applications\Notes.app
в свой скрипт, приложение Notes будет запускаться каждую x
минуту (если ваша батарея заряжена)
Эта задача будет выполняться, даже если никто не вошел в систему.
Я знаю, что вы задавали этот вопрос некоторое время назад, но, надеюсь, это кому-нибудь поможет.