なぜこれが起こっているのかわからないのですが、bashはwhile
ループで実行中にコマンドを削除するようです。 私は次のスクリプトを持っている:私はseperatlyコマンドを実行したときに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
が直接壊れていないことを知りました。そのすべての行末にCRLFをエコーするコマンドがadb shell
です。私は
adb shell ls /foo/bar | tr -d '\015' | while read file
do
folder="/foo/bar/$file"
adb pull $folder download
done
を使用している場合、それは働きます! しかし、なぜbashはCRLFにアレルギーがあるのですか?そして、なぜその削除が完了するのか?
あなたのフォルダvar、つまり 'echo adb pull" $ folder "download'を引用してみてください。あなたが望む結果が得られるまで、 'echo'を使うことをお勧めします。がんばろう。 – shellter
ok woot lol、私はadbがCRLFを使って新しい行をエコーアウトしていることを理解しました...私がそうするとクレイジーになり、コマンドoOをストライプします。私は 'を追加しました| tr -d '\ 015' 'を実行して、adbシェル出力からすべてのCRを削除します。 whileはなぜCRを許可しないのですか? – reox