#bash #shell #adb
#bash #оболочка #adb
Вопрос:
В bash, когда я набираю:
$ echo 1 | while read L; do echo $L; done
Очевидно, что в результате я получил 1.
В оболочке adb я получил тот же результат.
Однако, если я введу следующее:
$ adb shell "echo 1 | while read L; do echo $L; done"
Я ничего не получил!
Есть ли кто-нибудь, кто знает, почему я ничего не получил в приведенном выше?
Ответ №1:
Вы должны были получить новую строку из adb
оболочки. Проблема в том, что оболочка, вызывающая adb shell "… echo $L; …
строку, увидела $L
и расширила ее до пустой строки, поэтому adb shell
увидела командную строку:
echo 1 | while read L; do echo; done
Используйте одинарные кавычки:
adb shell 'echo 1 | while read L; do echo $L; done'
В качестве альтернативы, используйте изобретательный:
L='$L'
adb shell "echo 1 | while read L; do echo $L; done"
Теперь вызывающая оболочка заменяет $L
with $L
, и все работает так, как задумано (но скорее по совпадению).