シェルスクリプトループから複数のadbコマンドを実行すると、ほとんどのコマンドが実行されません。なぜADBコマンドはbashスクリプトループを破るのですか?
これはスクリプト例です。
スクリプト名:adbscript.sh
:
#!/bin/bash
devicecount=0
while read device; do
((devicecount++))
serialno="NA"
appinstallcount="NA"
echo "Processing Device #$devicecount: $device"
# serialno=$(adb -s $device shell getprop ro.serialno)
# appinstallcount=$(adb -s $device shell pm list packages | wc -l)
echo -e "Device: $device | Serialno: $serialno | Apps installed: $appinstallcount\n"
done < <(adb devices | egrep "\bdevice\b" | awk '{print $1}')
echo "Finished."
をコメントアウトのadbコマンドによる出力は、私が接続されている5つのデバイスを持っています。 adbコマンドなしでbashファイルから実行すると、これが出力になります。 5つのループのそれぞれを反復します。 adb shell
コマンドは、最初のループの反復行のみ正しくコメントアウトある場合ADB
コマンド
を含むループを有する
Processing Device #1: 192.168.15.93:5123 Device: 192.168.15.93:5123 | Serialno: NA | Apps installed: NA Processing Device #2: 192.168.15.95:5123 Device: 192.168.15.95:5123 | Serialno: NA | Apps installed: NA Processing Device #3: emulator-5554 Device: emulator-5554 | Serialno: NA | Apps installed: NA Processing Device #4: 31005c77c8cfb200 Device: 31005c77c8cfb200 | Serialno: NA | Apps installed: NA Processing Device #5: 98883837594d4f5453 Device: 98883837594d4f5453 | Serialno: NA | Apps installed: NA Finished.
出力。これは、コメントを解除adb
コマンドで出力されます:
Processing Device #1: 192.168.15.93:5123 Device: 192.168.15.93:5123 | Serialno: 98883837594d4f5453 | Apps installed: 442 Finished.
誰かがこの行動とどのようなすべてのラインと処理されるすべてのループを持っているために行わなければならないと説明できますか?ところで
、このスクリプト(一方のライナコマンドおよび出力)に供給される出力である:
$ adb devices | egrep "\bdevice\b" | awk '{print $1}'
192.168.15.93:5123
192.168.15.95:5123
emulator-5554
31005c77c8cfb200
98883837594d4f5453
ベスト推測 - 'adb'コマンドがstdinを消費しています。 'adb'コマンドでstdin' dev/null'をリダイレクトしてみてください。 –
ありがとう!できます。あなたが解決の形であなたの決議を記入したら、私は答えを受け入れ、寄付をupvoteします。 –