私がやろうとしているのは、iPhone が Macbook Air(10.11.6) に接続されていることを検出することであり、デバイスの UDID を取得する必要がある場合です。その範囲で、新しい USB が差し込まれたときにスクリプトをトリガーするデーモンを作成しました。
<?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>local.job</string>
<key>LaunchEvents</key>
<dict>
<key>com.apple.iokit.matching</key>
<dict>
<key>com.apple.device-attach</key>
<dict>
<key>IOMatchLaunchStream</key>
<true/>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>idProduct</key>
<string>*</string>
<key>idVendor</key>
<string>*</string>
</dict>
</dict>
</dict>
<key>Program</key>
<string>/Users/cswtillster/Library/Mine/test2.sh</string>
</dict>
</plist>
これにより、次のスクリプトがトリガーされます。
#!/bin/sh
now="$(date)"
echo "Current date and time %s\n" "$now" >> /Users/cswtillster/Library/Mine/usb_apple.txt
i=0
for line in $(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'); do
UDID=${line}
echo "$UDID" "%s\n" >> /Users/cswtillster/Library/Mine/usb_apple.txt
udid_array[i]=${line}
i=$(($i+1))
done
cnt=${#udid_array[@]}
for ((i=0;i<cnt;i++)); do
echo ${udid_array[i]}
done
スクリプトは UDID を取得しますが、私の問題は停止せず、約 10 秒ごとに実行されることです。
Current date and time %s
Tue Sep 27 16:06:39 WEST 2016
ffe6abf455a1ca722cbe1e2d970730411d0dc3fe %s
Current date and time %s
Tue Sep 27 16:06:49 WEST 2016
ffe6abf455a1ca722cbe1e2d970730411d0dc3fe %s
Current date and time %s
Tue Sep 27 16:06:59 WEST 2016
ffe6abf455a1ca722cbe1e2d970730411d0dc3fe %s
誰でもこの問題を解決できますか? 私が必要とするのは、スクリプトが USB ポートへの接続ごとに 1 回だけ実行されることです。