【发布时间】:2016-05-07 07:02:22
【问题描述】:
我正在尝试编写一个脚本来提取我今天拍摄的任何照片或视频。下面是代码的样子:
for i in $(adb shell ls -l /sdcard/DCIM/Camera/ | grep $(date +%Y-%m-%d) | awk '{ print $7 }' ) ; do adb pull /sdcard/DCIM/Camera/$i ~/Photos ; done
这是我运行它时遇到的错误:
' does not existsdcard/DCIM/Camera/IMG_20160507_012827.jpg
它正确地获取了需要拉取的文件的名称,但由于某种原因,它没有正确地将该信息传递给“adb pull”。
我是否需要做其他事情来将一个命令的输出“清理”为另一个命令的输入?
【问题讨论】:
-
嗨,关键字“sanitize”把我带到了这里。关于标题“adb shell one-liner not pass output proper”,这似乎是一个有效的问题,但似乎并不是真正的重复,就像它的关闭声明原因一样。复制步骤:将
adb的输出填充到 bash 变量 (OUT=$(adb gimme sth); echo $OUT) 中,然后看到它部分崩溃。这就是重点,@monk 的回答似乎也忽略了这一点。 -
...虽然无法提供正确的答案,但我将在此处转储: • 一些
adb命令(或至少adb shell)以0x0d 和0x0a 结束它们的输出行,并且这就是让我们感到困惑的地方。 • 当您将字符串移交给tr时,环境卫生已经完成:adb shell ls | tr -d '\r'• 您可以检查将其传递给八进制转储的输出 (od):adb shell ls | od -c,它会告诉您有关包含的特殊字符的更多信息 • 这个解决方案很大程度上受益于这个答案:stackoverflow.com/a/802439/211514