2011-02-15 42 views
-1

我已經寫了一個小腳本,從動態鏈接的原生代碼開發的Android設備把所有共享對象文件。該腳本工作正常,我可以停在那裏,但我不喜歡使用臨時文件。我花了一些時間試圖重新寫這個,所以我不需要它,但失敗了各種嘗試。下面是腳本:重寫劇本因此它可以不使用臨時文件

declare -rx OUT_FILE=tmp.sh 
adb shell 'cd /system/lib && for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done' > $OUT_FILE 
dos2unix $OUT_FILE 
chmod +x $OUT_FILE 
./$OUT_FILE 
rm $OUT_FILE 

我嘗試使用子外殼的ADB命令和結果賦給然後可能被送入sed將剝離回車的變量。我沒有得到那個工作。下面是一個例子,我怎麼嘗試使用命令替換:

res=$(adb shell 'cd /system/lib && for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done') 
echo $res > tmp.txt 

現在從我有限的知識,我會懷疑從第二溶液tmp.txt文件將包含相同conent在我的工作溶液中的tmp文件。不是這種情況。

最好的問候,

安德烈

+0

你的腳本應該刪除$ OUT_FILE,不是嗎?然後,您可以將名稱從'tmp.sh'更改爲'tmp。$$'或其他任何內容,而無需更改腳本的最後一行。您可能還想調查「陷阱」以確保臨時文件在中斷時被刪除。所有這些都是想要擺脫臨時文件的充分理由! – 2011-02-15 14:33:20

+0

你是對的關於RM,這是一個複製/粘貼錯誤... – 2011-02-15 14:42:30

回答

0

假設管道支持,那麼這應該工作 - 沒有中間文件。我假設'dos2unix'也可以作爲純粹的過濾器。

adb shell 'cd /system/lib && 
      for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done' | 
dos2unix | 
bash 
0

從上面我設法提煉這個所有提示:

lib_list=$(adb shell 'for f in /system/lib/*.so; do echo $f; done') 
for f2 in $lib_list 
do 
    path=$(echo $f2 | tr -d '\r'); 
    adb pull $path ./lib 
done 

這工作,主要的問題是回車。通過使用-x調試開關運行腳本可以很好地看到。

相關問題