Выход из символов, когда передающие аргументы команде

Вы случайно изменились /bin/readlink быть busybox, а не GNU coreutils версия.

Это вызовет БОЛЬШУЮ поломку. Необходимо восстановить GNU coreutils.

Попробовать

# aptitude reinstall coreutils
3
03.09.2012, 04:48
2 ответа

Так как Вы выполняете это на другом уровне оболочки, он расширен, прежде чем он будет выполнен в подоболочке. Самый легкий способ зафиксировать это состоит в том, чтобы выйти из любых специальных символов в имени файла:

adb shell find /storage/sdcard0/Sound\ Recordings/ | tail -1 | while IFS= read -r file ; do
    adb pull "$(printf %q "$file")" ~/Desktop/
done
1
27.01.2020, 21:29
  • 1
    Это теперь дает мне следующую ошибку: remote object '/storage/sdcard0/Sound$'Recordings/20120831T070055.wav\r'' does not exist. Так или иначе это форматирует имя файла очень странным способом. –  Naftuli Kay 03.09.2012, 18:07
  • 2
    $file потребности, которые будут заключены в кавычки в команде printf. Кроме того, изменение while read file кому: while IFS= read -r file считать целую строку. Или лучше, просто сделайте: file=$(adb shell find /blah | tail -1); adb pull "$(printf %q "$file")". –  dubiousjim 03.10.2012, 17:19
  • 3
    @dubiousjim. Я обычно включал бы их в первый пересмотр, за исключением того, что это в значительной степени посреди спектра устойчивости для циклов файла. маркировка –  l0b0 03.10.2012, 17:44

Это - решение:

adb pull "/storage/sdcard0/Sound Recordings/$(
    adb shell ls -1t '/storage/sdcard0/Sound Recordings' |
        sed q |
        tr -d '\r'
)" .

Вы сталкиваетесь с проблемами потому что adb возвратите некоторые возвраты каретки как Windows \r

sed q просто забавный способ отобразить первое вхождение как head -n1

1
27.01.2020, 21:29

Теги

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