3

У меня есть USB-модем, который монтируется, как, скажем, XYZ(который содержит программное обеспечение для набора номера и Readme), когда он вставлен. Чтобы подключиться, используя его, я должен извлечь его, а затем подключить его с помощью ppp dialer.

Допустим, он монтируется под именем /Volumes /XYZ

Я хочу сделать что-то вроде, если я вставлю USB-устройство, и оно монтируется под именем XYZ, я хочу, чтобы оно было немедленно извлечено.

Как я могу это сделать?

2 ответа2

4

Однажды я сделал нечто подобное, когда всякий раз, когда монтировался диск, названный определенным образом, немедленно запускался сценарий для синхронизации содержимого набора папок с диском.

Чтобы сделать что-то подобное здесь, скрипт должен выглядеть так:

#!/bin/bash

if [ -d /Volumes/XYZ ];
    then
    echo “Ejecting XYZ!”;
    umount /Volumes/XYZ
    exit;
fi

Сохраните его где-нибудь, в каталоге ~/bin/ если он у вас есть, или, может быть, ~/Library/Scripts/ , просто запомните, где.

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

<?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>Label</key>
    <string>com.superuser.226504.example</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Path/To/Script/unmount-modem.sh</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>StartOnMount</key>
    <true/>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>

Это должно быть сохранено в виде .plist (имя которого похоже на строку, используемую вместо «com.superuser.226504.example») и сохранено в ~/Library/LaunchAgents . Вы можете либо загрузить его из терминала через launchctl load ~/Library/LaunchAgents/pathtoplist либо выйти из системы / снова войти в систему, и он должен загрузиться, если все настроено правильно.

1

Вы можете использовать следующий AppleScript:

on adding folder items to this_folder after receiving added_items
    set the item_count to the number of items in the added_items

    if the item_count is greater than 1 then
        display dialog "Multiple additions, I can't handle that!"
    else
        set the volume_name_raw to (item 1 of the items in the added_items as text)
        set AppleScript's text item delimiters to ":"
        set volume_name to text item 1 of volume_name_raw as text
        if volume_name is "Carbon Copy Cloner" then
            do shell script "hdiutil detach '/Volumes/" & volume_name & "'"
        end if
    end if
end adding folder items to

На основе действия папки "оповещение о новом элементе" от Apple

Измените имя тома, который вы хотите извлечь в следующей строке:

if volume_name is "Carbon Copy Cloner" then

Чтобы активировать его:

  1. Откройте /Applications/Utilities/AppleScript Editor и вставьте скрипт выше.
  2. Сохраните его как скрипт (например, eject.scpt) в ~/Library/Scripts/Folder Action Scripts/ .
  3. Закройте редактор AppleScript.
  4. Щелкните правой кнопкой мыши любую папку в Finder, выберите « Службы»> «Настройка действий с папками».
  5. Закрыть диалоговое окно листа.
  6. Установите флажок Включить действия с папками
  7. Нажмите кнопку + слева внизу и нажмите Command-Shift-G в появившемся диалоговом окне файла. Ввод /Volumes . Не выбирайте пункт, просто нажмите ОК .
  8. Выберите запись списка Volumes и нажмите кнопку + под списком справа.
  9. Выберите eject.scpt в диалоговом окне листа и нажмите « Вложить»
  10. Закрыть настройку действий папки .

Готово!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .