Я действительно не понимаю, почему это происходит, bash, похоже, удаляет команды во время работы в цикле while
.У меня есть следующий сценарий:
adb shell ls /foo/bar | while read file
do
folder="/foo/bar/$file"
adb pull $folder download
done
, когда я запускаю команду отдельно, она прекрасно работает.Но когда я запускаю его так, я получаю следующий вывод:
' does not existfoo/bar/filesdfsdf.sdf
для каждого файла в /foo/bar.
Так что я попытался вернуть мне команду в виде строки,я изменил на echo "adb pull $folder download"
и получил следующий вывод:
download/foo/bar/fileasdfs.sdf
для каждой строки.Кажется, что bash что-то делает со строкой и заменяет некоторые вещи здесь ... Если я использую '
, поэтому замена bash не произойдет, я получу правильный вывод.
что здесь происходит?
РЕДАКТИРОВАТЬ: я понял, что не while
напрямую нарушается, это команда adb shell
, которая повторяет CRLF на каждом конце строки.если я использую
adb shell ls /foo/bar | tr -d '\015' | while read file
do
folder="/foo/bar/$file"
adb pull $folder download
done
, это работает!Но почему у bash такая аллергия на CRLF?И почему его удаляет команды?