【问题标题】:Android adb shell - ash or ksh?Android adb shell - ash 还是 ksh?
【发布时间】:2012-08-10 14:47:56
【问题描述】:

Android 在线文档Android Debug Bridge 说“Adb 提供了一个灰壳”。果然,如果我 adb shell 到 AVD 模拟器,我会得到 ash,它基本上是一个精简的 Bourne shell。

但是,如果我连接到几个远程设备,一个是 HTC 手机,另一个是 ASUS Transformer Prime 平板电脑,它们都有一个 Korn shell 版本,即:KSH_VERSION='@(#)MIRBSD KSH R39 2010/08/24'。虽然 MIRBSD KSH 不是成熟的 AT&T Korn shell,但它仍然比 ash 强大得多。

模拟器正在运行 Jelly Bean,并且两个设备都使用 ICS。再挖一点,看起来 ash 在 Gingerbread 中,但 mirbsd ksh 在 Honeycomb 中。

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

【问题讨论】:

  • 如果不是您几天前在 freenode 上的 #!/bin/mksh 中询问了这个问题,那么至少还有一个人在 Android 上遇到了 mksh。但是您在某种连接到另一个设备的模拟器中,并且该文档专门指的是模拟器上的某些调试环境?我不确定您为什么希望它具有相同的默认外壳。不管怎样,很高兴听到他们选择了一个理智的外壳。没有任何东西接近 mksh 的大小。
  • 不,不是我。模拟器是谷歌的 AVD。我希望在相同版本的操作系统上拥有一致的外壳,除非他们在 Jelly Bean 上倒退......

标签: android adb ksh ash


【解决方案1】:

我是 mksh(The MirBSD Korn Shell)的作者,在已经为 Android 1.5 进行了 mksh 的实验性构建之后,我在大约 1.6 倍的时间提交了它以包含在 Android 中。

虽然 Android-x86 很早就使用了它,但它花了很长时间才被接受。起初我们有一个可配置的开关,板配置将决定使用 ash 还是 mksh;谷歌同意在一台设备上只能运送一个。大约在准备 2.4 的时候(从未发布),硬件板配置使用 mksh,而仿真器配置使用 ash,以确保不引入 mksh-specifics 以防他们想要或需要返回灰。 2.4 一直没有发布,我也不知道 3.0 系列用的是什么,但是由于 Android 4.0 mksh 是它的标准系统外壳。

mksh 甚至得到了 Geremy Condra 的安全审查,我们(包括 AOSP/Google 人员以及我在内)会定期推送代码更新。有趣的事实:他们最初并不打算在手机上发布外壳根本,但同意发布 mksh,因为那时他们已经交付了带有外壳的设备,所以它成为了发布的 API。 Android 开发人员在 mksh 中排名第一的功能是 tab 补全。

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

【讨论】:

  • 非常感谢您抽出宝贵时间回答问题。
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2014-02-21
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多