Sulla base della risposta di @ Oli, questo consentirà anche il comando (s) eseguito in parallelo, utilizzando xargs
. Basta aggiungere questo al file .bashrc
:
function adball()
{
adb devices | egrep '\t(device|emulator)' | cut -f 1 | xargs -t -J% -n1 -P5 \
adb -s % "[email protected]"
}
e applicarlo con l'apertura di un nuovo terminal shell, . ~/.bashrc
o source ~/.bashrc
.
- Se si desidera solo per funzionare su dispositivi (o solo su emulatori), è possibile modificare il
(device|emulator)
grep togliendo quello che non vuoi. Questo comando, come scritto sopra, verrà eseguito su tutti i dispositivi e gli emulatori collegati a.
- l'argomento
-J%
specifica che si desidera che xargs sostituisca la prima occorrenza di %
nell'utilità con il valore dal lato sinistro della pipa (stdin).
NOTA: questo è per BSD (Darwin/Mac OS X) xargs
. Per GNU/Linux xargs
, l'opzione è -I%
.
-t
causerà xargs per stampare il comando che sta per eseguire immediatamente prima di eseguirlo.
-n1
significa xargs dovrebbero utilizzare al massimo 1
argomento a ogni chiamata del comando (al contrario di alcune utility che possono prendere più argomenti, come rm
per esempio).
-P5
consente di eseguire contemporaneamente processi paralleli fino a 5
. Se si desidera invece eseguire i comandi in sequenza, rimuovere semplicemente l'intero argomento -P5
. Ciò consente anche di avere due varianti del comando (adball
e adbseq
, ad esempio) - una che viene eseguita in parallelo, l'altra in sequenza.
Per dimostrare che è parallela, è possibile eseguire un comando shell che include un sonno in esso, per esempio:
$ adball shell "getprop ro.serialno ; date ; sleep 1 ; date ; getprop ro.serialno"
È possibile utilizzare questo per eseguire qualsiasi adb
comando che si desidera (sì, anche adball logcat
funzionerà! ma potrebbe sembrare un po 'strano perché entrambi i registri saranno in streaming sulla tua console in parallelo, quindi non sarai in grado di distinguere da quale periferica proviene una determinata linea di log).
Il vantaggio di questo approccio rispetto @ di dtmilano &
approccio è che xargs
continuerà a bloccare l'involucro finché almeno uno dei processi paralleli è ancora in funzione: che significa che è possibile uscire entrambi i comandi da semplicemente usando ^C
, proprio come sei abituato a fare. Con l'approccio di dtmilano, se doveste eseguire adb+ logcat
, entrambi i processi di logcat sarebbero in background, e quindi dovrete uccidere manualmente il processo logcat usando ps
e kill
o pkill
. L'uso di xargs lo rende simile a una normale riga di comando di blocco e, se si dispone di un solo dispositivo, funzionerà esattamente come adb
.
Funziona alla grande! Grazie! L'unica cosa che manca ora è farlo in parallelo :) – Heinrisch
'adb -s $ dispositivo $ @ &' farà in parallelo –
@Oli Grazie mille ... ho risparmiato il mio tempo (y) –