ADB原理(第四篇:聊聊adb shell ps与adb shell ps有无双引号的区别)
前言
对于经常使用adb的同学,不可避免的一定会这样用adb,比如我们想在手机里执行ps命令,于是在命令行中写下如下代码:
adb shell ps -ef
或者
adb shell "ps -ef"
两种方式都可以使用,你喜欢用哪个呢?但是你知道双引号的作用吗?
双引号的作用
从bash解释器的角度看:解释的力度不同,双引号内的有些特殊字符不再处理了
1、添加双引号的部分,单词分隔功能会失效(空白字符分隔:包括换行、空格、制表符)
由于单词分隔功能失效,"ps -ef" ,就是一个整体
2、双引号内仅支持命令替换、变量名替换、还有数字计算、还有转义字符,四种特殊字符
"$()"、"${}"、"$[]"、比如\n
从adb命令的角度看:adb收到的参数数量不同
1、3个参数
adb shell ps -ef,这个时候adb接受到3个参数,分别是shell、ps、-ef,bash解释器通过空白字符,分隔单词,所以是3个参数
2、2个参数
adb shell "ps -ef",此时接受到的是2个参数,由于双引号,让单词分隔功能失效,所以只有shell、以及"ps -ef" ,着2个参数传递给adb命令了
重定向时,有无双引号的差别
adb shell ps -ef > ./hello.txt
或者
adb shell "ps -ef > /sdcard/hello.txt"
""具有单词分隔的功能,前面已经交代了,这次在说明一件事,ps命令根本就不知道自己的标准输出写到文件中了,它只是认为还写入到标准输出,至于重定向,那都是bash解释器作的事情
1、重定向到本地主机的文件中
adb shell ps -ef > ./hello.txt
对于adb命令,它只收到3个参数,shell、ps、-ef,后面的 > ./hello.txt,由本地主机的bash解释器自行处理,它会本地主机,而不是手机中,创建一个hello.txt文件,用于插入adb返回的标准输出
2、重定向手机文件中
adb shell "ps -ef > /sdcard/hello.txt"
由于""具备单词分隔功能失效,以及仅只是4种特殊字符(上面提到过的),其他字符不再解释,这里的重定向符号>,bash解释器并不会再去解释
对于adb命令,adb收到了2个参数,shell、以及"ps -ef > /sdcard/hello.txt",所以ps命令的标准输出其实是写入到手机的/sdcard/hello.txt文件中,这是由android上的bash解释器来处理的,所以它自然会写入到手机的文件中
管道符,也有不同
adb shell ps -ef | grep camera
或者
adb shell "ps -ef | grep camera"
1、执行的是本地主机的grep
adb shell ps -ef | grep camera
bash解释器看到管道符,那么代表adb命令以及后面的参数就到管道符那里,所以adb收到了3个参数,分别是shell、ps、-ef。 而 | grep camera,则是由bash解释器来处理,并调用本地主机的grep来接受前一个adb命令的标准输出,再由grep向标准输出写入
2、执行的是手机上的grep命令
adb shell "ps -ef | grep camera"
""命令已经让"ps -ef | grep camera"成为一个整体,同时管道符号也不会再解释器,对于adb,它只收到了2个参数,分别是shell、"ps -ef | grep camera",当传入到手机中,调用的是手机上的grep命令
总结
1、熟悉双引号""作用,才能理解上面的情况,再强调一遍,双引号会让单词分隔功能失效(空白字符无效),仅支持命令替换、变量名替换、整数计算、转义字符,其他字符,bash解释器都不会再解释,比如 重定向 >,还有 管道 |
2、重定向、管道符都是bash解释器来处理的,对于命令本身,他们都不知道这些的存在,他们只会向标准输出写入、标准错误写入、至于重定向到文件、还是通过管道进入到其他命令的标准输入,他们都是一概不知道的
3、理解了这个,可以避免编写adb命令的一些坑,尤其是使用windows命令行的时候,毕竟windows默认终端上没有grep命令
相关文章:
ADB原理(第四篇:聊聊adb shell ps与adb shell ps有无双引号的区别)
前言 对于经常使用adb的同学,不可避免的一定会这样用adb,比如我们想在手机里执行ps命令,于是在命令行中写下如下代码: adb shell ps -ef 或者 adb shell "ps -ef" 两种方式都可以使用,你喜欢用哪个呢&#…...
「网络编程」数据链路层协议_ 以太网协议学习
「前言」文章内容是数据链路层以太网协议的讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、以太网协议简介二、以太网帧格式(报头)三、MTU对上层协议的影响四、ARP协议4.1 ARP协议的作用4.2 ARP协议报头 一、以太网协…...
通过python操作neo4j
在neo4j中创建结点和关系 创建结点 创建电影结点 例如:创建一个Movie结点,这个结点上带有三个属性{title:‘The Matrix’, released:1999, tagline:‘Welcome to the Real World’} CREATE (TheMatrix:Movie {title:The Matrix, released:1999, tagl…...
Ubuntu中查看电脑有多少个核——lscpu
1. 使用lscpu命令: 打开终端并输入以下命令: lscpu你会看到与CPU相关的详细信息。查找"CPU(s)"这一行来看总的核心数。另外,“Core(s) per socket”表示每个插槽或每个物理CPU的核数,“Socket(s)”表示物理CPU的数量。将这两个值相乘即得到总…...
Python学习笔记第七十二天(Matplotlib imread)
Python学习笔记第七十二天 Matplotlib imread读取图像数据修改图像裁剪图像图像颜色 后记 Matplotlib imread imread() 方法是 Matplotlib 库中的一个函数,用于从图像文件中读取图像数据。 imread() 方法返回一个 numpy.ndarray 对象,其形状是 (nrows,…...
安卓核心板_天玑700、天玑720、天玑900_5G模块规格参数
5G安卓核心板是采用新一代蜂窝移动通信技术的重要设备。它支持万物互联、生活云端化和智能交互的特性。5G技术使得各类智能硬件始终处于联网状态,而物联网则成为5G发展的主要动力。物联网通过传感器、无线网络和射频识别等技术,实现了物体之间的互联。而…...
CS224W2.2——传统基于特征的方法(边层级特征)
在这篇中,我们介绍了链接预测的重要任务,以及如何提取链接级特征来更好地解决这类问题。这在我们需要预测缺失的边或预测将来会出现的边的情况下很有用。我们将讨论的链路级功能包括基于距离的功能,以及本地和全局邻域重叠。 文章目录 1. 边层…...
python—openpyxl操作excel详解
前言 openpyxl属于第三方模块,在python中用来处理excel文件。 可以对excel进行的操作有:读写、修改、调整样式及插入图片等。 但只能用来处理【 .xlsx】 后缀的excel文件。 使用前需要先安装,安装方法: pip install openpyxl…...
汽车行驶性能的主观评价方法(2)-驾驶员的任务
人(驾驶员)-车辆-环境闭环控制系统 驾驶过程中,驾驶员承担着操纵车辆和控制车辆的任务。驾驶员在不知不觉中接受了大量光学、声学和动力学信息并予以评价,同时不断地通过理论值和实际值的比较来完成控制作用(图 2.1&a…...
server2012 通过防火墙开启局域网内限定IP进行远程桌面连接
我这里需要被远程桌面的电脑系统版本为windows server2012 1、打开允许远程连接设置 2、开启防火墙 3、设置允许“远程桌面应用”通过防火墙 勾选”远程桌面“ 3、入站规则设置 高级设置→入站规则→远程桌面-用户模式(TCP-In) 进入远程桌面属性的作用域——>远程IP地址—…...
lvs+keepalived: 高可用集群
lvskeepalived: 高可用集群 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived软件。实现的是调度器的高可用。 但是:keepalived不是专门为集群服务的,也可以做其他服务器的高可用。 lvs的高可用集群…...
C++标准模板(STL)- 类型支持 (类型特性,is_pointer,is_lvalue_reference,is_rvalue_reference)
类型特性 类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实…...
C++——类和对象(上)
1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 例如手洗衣服 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间…...
ffmpeg中examples编译报不兼容错误解决办法
ffmpeg中examples编译报不兼容错误解决办法 参考examples下的README可知,编译之前需要设置 PKG_CONFIG_PATH路径。 export PKG_CONFIG_PATH/home/user/work/ffmpeg/ffmpeg/_install_uclibc/lib/pkgconfig之后执行make出现如下错误: 基本都是由于库的版…...
Python与CAD系列基础篇(十一)图形旋转、镜像、缩放
目录 0 简述1 图形旋转2 图形镜像3 图形缩放0 简述 本篇详细介绍使用①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件进行图形旋转、镜像、缩放的方法。 1 图形旋转 pyautocad方式 from pyautocad import Autocad, APoint, aDouble import mathacad = Autoca…...
STM32串口通信
数据通信的基础概念 在单片机的应用中,数据通信是必不可少的一部分,比如:单片机和上位机、单片机和外 围器件之间,它们都有数据通信的需求。由于设备之间的电气特性、传输速率、可靠性要求各 不相同,于是就有了各种通信…...
Kafka笔记
一、Kafka 概述 1.1.定义 传统定义:Kafka 是一个分布式的基于发布/订阅模式的消息队列,主要用于大数据实时处理领域。最新定义:Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务…...
【1.2】神经网络:神经元与激活函数
✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 神经网络(随缘更新) ✨特色…...
【PythonRS】Pyrsgis库安装+基础函数使用教程
pyrsgis库是一个用于处理地理信息系统(GIS)数据的Python库。它提供了一组功能强大的工具,可以帮助开发人员使用Python语言创建、处理、分析和可视化GIS数据。通过使用pyrsgis库,开发人员可以更轻松地理解和利用地理信息。 pyrsgis库包含了许多常见的GIS操…...
线扫相机DALSA--分频倍频计算公式及原理
分频倍频计算公式及原理 推导原理: 假设编码器脉冲精度为P;同步轮/辊周长为C,Fov为视野,Res为线扫相机分辨率,N代表N倍频编码器,分频为D,倍频为M 线扫项目常规采用N(N 4࿰…...
AI辅助开发:让快马AI成为你的编程搭档,迭代优化openclaw风格代码
今天想和大家分享一个开发小技巧:如何用AI辅助工具快速迭代优化代码。最近我在做一个数据抓取的小项目,需要实现类似openclaw的功能,正好用InsCode(快马)平台的AI功能试了试,效果出乎意料的好。 基础功能实现 最开始我只需要一个简…...
Flutter地图集成与跨平台定位从0到1:3大平台配置+5个避坑指南
Flutter地图集成与跨平台定位从0到1:3大平台配置5个避坑指南 【免费下载链接】flutter_amap A Flutter plugin use amap.高德地图flutter组件 项目地址: https://gitcode.com/gh_mirrors/fl/flutter_amap 在移动应用开发中,地图集成和定位服务是许…...
告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程)
告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程) 在嵌入式开发领域,数据通信的效率往往决定着整个系统的性能上限。当你的STM32F103只有20KB RAM可用时,JSON这种看似方便的文本协议突然变成了奢侈的选择…...
洛雪音乐音源完全指南:免费获取全网高品质音乐的终极方案
洛雪音乐音源完全指南:免费获取全网高品质音乐的终极方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 洛雪音乐音源项目是一个专注于音乐资源聚合的开源解决方案,通过标…...
解决Calibre中文路径乱码的终极方案:从根本上保护中文文件名
解决Calibre中文路径乱码的终极方案:从根本上保护中文文件名 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地…...
突破单机限制:PlugY重塑暗黑破坏神2游戏体验的五大维度升级
突破单机限制:PlugY重塑暗黑破坏神2游戏体验的五大维度升级 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 一、单机玩家的困境与破局之道 在暗黑破坏神…...
SecGPT-14B模型调优指南:降低OpenClaw安全任务Token消耗
SecGPT-14B模型调优指南:降低OpenClaw安全任务Token消耗 1. 为什么需要关注Token消耗问题 去年冬天,当我第一次用OpenClaw对接SecGPT-14B执行安全日志分析时,被惊人的Token消耗吓了一跳——一个简单的500行日志分析任务竟然消耗了近3万Toke…...
零基础也能快速上手AI建站工具:手把手教你10分钟生成网站
很多人想建站但一直被技术门槛劝退,觉得需要代码、会设计、能写文案。其实现在用AI建站工具,这些都可以交给机器。这套通用教程不针对某个具体工具,而是拆解任何零基础建站工具都适用的核心操作步骤。跟着做,你也能在10分钟左右从…...
5步解锁无损音乐:洛雪音乐音源从配置到精通的完整指南
5步解锁无损音乐:洛雪音乐音源从配置到精通的完整指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 洛雪音乐音源项目是一个专为洛雪音乐客户端设计的开源音源集合,汇集了…...
UE5回放系统避坑指南:解决ReplaySystem在蓝图项目中的常见崩溃与Bug
UE5回放系统深度排雷手册:蓝图项目中的崩溃预防与高阶调试技巧 当你第一次在UE5中成功录制并回放角色动作时,那种成就感无与伦比。但很快,奇怪的崩溃、无法解释的画面冻结、以及幽灵般的抗锯齿异常就会接踵而至。这些不是你的代码问题——而是…...
