Android adb shell - ash还是ksh?

cda*_*rke 10 android ksh adb ash

Android在线文档Android Debug Bridge说"Adb提供了一个灰壳".果然,如果我adb shell去AVD模拟器,我会得到灰烬,这基本上是一个简化的Bourne shell.

但是,如果我连接到几个远程设备,一个是HTC电话,另一个是华硕Transformer Prime平板电脑,它们都有一个版本的Korn shell,它提供:KSH_VERSION='@(#)MIRBSD KSH R39 2010/08/24'.虽然MIRBSD KSH不是一款成熟的AT&T Korn外壳,但它仍然比灰烬强大得多.

模拟器正在运行Jelly Bean,两个设备都在使用ICS.再做一点挖掘,看起来像是在姜饼中的灰烬,而在Honeycomb中则是mirbsd ksh.

那么,有人可以确认Android在线文档是错误的,并且模拟器运行的是过时的shell吗?还是供应商正在实施自己的?

mir*_*los 27

我是mksh(The MirBSD Korn Shell)的作者,并且在已经为Android 1.5进行了mksh的实验性构建之后大约1.6次将其提交到Android中.

尽管Android-x86很早就使用了它,但这需要花费很长时间才能被接受.起初我们有一个可配置的开关,其中电路板配置将确定是否使用了灰或mksh; 谷歌同意只有一个应该在设备上发货.在准备2.4(从未发布)的时候,硬件板配置使用mksh,而模拟器配置使用灰,以确保不引入mksh特定,以防他们想要或需要返回灰.2.4从未发布,我不知道3.0系列上使用了什么,但是因为Android 4.0 mksh是它的标准系统shell.

mksh甚至得到了Geremy Condra的安全审查,我们(AOSP/Google和我这两个人)都会定期推送更新代码.有趣的事实:他们最初根本不打算在手机上发货,但他们同意发货mksh,因为他们已经在那时装有带有外壳的设备,因此它成为已发布API的一部分.Android开发人员喜欢mksh中的第一个功能,就是灰烬,是标签完成.

现在看一下在线文档,似乎他们删除了灰分参考.他们现在只是没有明确说明哪个shell可用.(他们确实同意链接到在线文档中的mksh主页 - 我提交了一个补丁 - 以便用户可以RTFM并提供错误报告和其他反馈.)

  • 非常感谢您抽出宝贵时间回答问题。 (2认同)