我编写了一个小脚本来从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
我尝试使用子shell作为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文件将包含与我工作解决方案中的tmp文件相同的conent。事实并非如此。
最诚挚的问候,
安德烈
答案 0 :(得分:0)
假设支持管道,那么这应该工作 - 没有中间文件。我正在疯狂地假设“dos2unix”也可以作为纯粹的过滤器使用。
adb shell 'cd /system/lib &&
for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done' |
dos2unix |
bash
答案 1 :(得分: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调试开关运行脚本可以很好地看到这一点。