欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

adb中ps命令的详解,adb shell的作用

终极管理员 知识笔记 45阅读
前言

    对于经常使用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、-efbash解释器通过空白字符分隔单词所以是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命令

标签:
声明:无特别说明,转载请标明本文来源!