Bash: перечислить все подключенные устройства

Я подключил несколько устройств Android к моему ноутбуку. И я могу перечислить их SN

adb devices

вывод:

 List of devices attached 015d4a826e0ffb0f device 015d4a826e43fb16 device 015d41d830240b11 device 015d2578a7280b02 device 

Я хочу выполнить некоторые операции на каждом устройстве, например

adb -s $device install foo.apk

Но я не знаю, как позволить переменному device перебирать все устройства, получаемые adb devices .

Один из способов сделать это в bash . Прочитайте вывод своей команды и повторите ее во втором столбце, используя while loop .

 while read sn device; do adb -s "$sn" install foo.apk done < <(adb devices | sed '1d') 

Основной трюк состоит в том, чтобы отделить серийный номер устройства от другого выхода. Вам нужно отключить заголовок и второй столбец. Что-то вроде этого будет работать:

 for DEVICE in `adb devices | grep -v "List" | awk '{print $1}'` do adb -s $DEVICE install foo.apk done 

Вы можете использовать xargs и awk :

 adb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk 

Демоверсия:

Я помещаю ваш вход в file и используя echo чтобы проверить, что выход:

 $ awk 'NR>1{print $1}' file | xargs -n1 -I% echo adb -s % install foo.apk adb -s 015d4a826e0ffb0f install foo.apk adb -s 015d4a826e43fb16 install foo.apk adb -s 015d41d830240b11 install foo.apk adb -s 015d2578a7280b02 install foo.apk