Хотя проблема оказалась вызванной символами CR в adb shell
выводе (, вставленном дисциплиной строки tty pty, созданной в целевой системе Android (, см. здесь для получения более подробной информации )), другое возможное объяснение (, и я оставлю его там для будущих читателей, так как это общая проблема с xargs
), которая могла быть в:
adb shell ls /data/data | grep -i com.company | xargs -n1 adb uninstall
В зависимости от реализации xargs
stdin adb
будет либо /dev/null
, либо конвейером из grep
. В любом случае это не будет tty, и, возможно, поэтому adb
дает сбой, если предполагается, что он сможет взаимодействовать с пользователем.
С GNU xargs
и оболочкой с поддержкой замены процесса (, такой как zsh
), вы можете изменить его на:
xargs -n1 -ra <(adb shell ls /data/data | grep -i com.company) adb uninstall
В этом случае xargs
считывает список из файла, указанного в качестве аргумента для -a
, что позволяет вам не трогать стандартный ввод.
Или, поскольку вы упомянули zsh
, вы могли бы использовать:
autoload zargs # best in ~/.zshrc
zargs -L1 $(adb shell ls /data/data | grep -i com.company) -- adb uninstall
(использование -L
вместо -n
, так как zargs
-n
ограничивает общее количество аргументов до adb
(, включая uninstall
один ), что означает, что мы нужно-n 2
).
Или просто используйте цикл, который в этом случае будет еще короче и понятнее:
for x ($(adb shell ls /data/data | grep -i com.company)) adb uninstall $x
Я думаю, что файлы из /usr/bin/ не всегда доступны во время загрузки -:
/usr/bin is a standard directory on Unix-like operating systems that contains most of the executable files (i.e., ready-to-run programs) that are not needed for booting (i.e., starting) or repairing the system. (ref: http://www.linfo.org/usr_bin.html )
Попробуйте вызвать "/usr/bin/unzip" вместо unzip.
Если вызов приходит достаточно поздно и /usr/bin/ к тому времени смонтирован, а отсутствует только среда PATH, это может сработать.