Android 与 Linux 脚本

Android 与 Linux 脚本

我正在尝试找出 Linux 脚本和 Android 脚本之间的差异。但我找不到语法上的任何具体差异。例如,Android 脚本可以执行但 Linux 脚本不能执行的操作、执行、性能等。

您能建议一些具体的寻找内容吗?

答案1

mkshAndroid默认运行 MirBSD Korn shell,它主要是 sh 的超集。与 bash 脚本相比,这有一些限制,例如不能使用数组。

此外,核心实用程序是 android 特定工具箱或玩具盒小程序,用法通常略有不同,有时受到限制(例如tar

定制Android设备使用忙碌盒作为缺少核心实用程序的扩展,哪些小程序也依赖于构建。

Android 权限扩展为SELinux在文件操作方面,这需要不同的脚本编写方式,例如,不能像sed往常一样使用,因为文件将丢失它的第二上下文。

人们应该始终针对尽可能多的 shell(mksh、ash)测试脚本,并保持核心实用程序的使用简单(例如代码应该与 BSD grep、toybox grep 和 busybox grep 一起使用)

避免使用交互式脚本,因为该设备没有真正的键盘,而且在命令行确认方面,小触摸屏很麻烦。

在 Android 设备上处理路径也略有不同,例如 shebang 是在用户空间(而不是在 RAM 中)持久存在的#!/system/bin/sh目录/data/local/tmp


值得一提的是亚行外壳它比其他任何东西都有更多的特权终端仿真器默认情况下。使用 adb 命令在主机上运行的脚本应明确提供,没有经验的用户可能会将它们与在客户端上运行的 shell 脚本混淆。


当涉及到在恢复模式下运行的脚本时,有一种相关的脚本语言伊迪菲它是对应的shell脚本替换。恢复模式 ( ) 下的 shellash与 Android 启动模式 ( ) 不同,mksh并且行为取决于恢复构建。人们应该捆绑 busybox 和所有必要的二进制文件,以避免丢失小程序的麻烦(例如awk


脚本语言本身并没有什么不同,也没有特定的语法。将 bash 脚本移植到 android 是绝对可能的,不需要特殊知识。这只是环境不同,因此应该在目标平台上测试脚本

也就是说,快乐的脚本编写:)

答案2

Android 或 Linux 没有单一的 shell,并且多年来一些默认值已经发生了变化,因此您可能在不同的设备和 Linux/Unix 和 Android 发行版(例如 Lineage OS、Debian、AIX)中拥有不同的默认 shell。

其中许多系统都包含多个 shell,这意味着您可以通过更改 shebang 来运行脚本ash,或者使用诸如 之bashksh的东西登录它们adb shell -t bash -i,因此,最终,比较是在不同的 shell 之间进行的。

这就是为什么很难列出基于Android或 的语法差异或其他问题Linux

相关内容