Ядро не распознает новые устройства из модуля DKMS?

adbдобавляет возврат каретки (он же 0x0d, Ctrl-M, \rи т. д. ) перед переводом строки. Вероятно, для простоты использования программного обеспечения Windows, которое ожидает, что строки заканчиваются на CR-LF, а не только на LF.

Вы можете увидеть это сами с помощью hexdumpaka hd, например.:

$ printf "$R" | hd
00000000  30 0d                                             |0.|
00000002

Потому что вам нужно вернуть только одно значение (код выхода). вы можете использовать printfвместо echoи перенаправить весь вывод lsна /dev/nullна устройстве Android, чтобы избежать печать любых новых строк (тогда adb не добавляет CR):

R="$(adb shell 'ls /mnt/ > /dev/null 2>&1 ; printf $?')"

Если на вашем устройстве Android нет printfили если вам нужно вернуть одну или несколько строк вывода из оболочки Android , вы можете использовать tr -d '\r'или dos2unixили sed 's/\r$//'или подобное, чтобы удалить CR.

dos2unixи sedявляются лучшим выбором, чем trздесь, потому что они удалят только те CR, за которыми сразу следует LF, оставляя нетронутыми любые CR, которые могут быть в другом месте в строка:

$ R="$(adb shell 'ls /mnt/ > /dev/null 2>&1 ; echo $?' | dos2unix)"
$ printf "$R" | hd
00000000  30                                                |0|
00000001
1
04.11.2015, 01:03
0 ответов

Теги

Похожие вопросы