Android shell 默认使用 busybox 命令

Android shell using busybox commands as default

我是 运行 android 上的一个脚本,为了使其尽可能可移植,所有命令都使用 busybox。我目前是如何设置它的,每个命令都有一个名称相同的函数,所以它将这些命令转换为使用 busybox,如下所示:

echo () {
busybox echo     
}
echo "hai"

由于每个命令都必须执行此操作,因此脚本中需要大量 space。这就是为什么我试图找出一种方法来强制 shell 默认使用 busybox 而不是 /system/bin 或 /system/xbin。 这可以通过修改 PATH 变量来实现吗?或者我可以使用 shell 中内置的环境变量?

或者我应该这样做吗?:

bs () {
busybox $@
}

bs echo "Some text"

(我想尽可能避免这种情况,因为它会降低可读性)

编辑

我可以启动一个循环的后台进程,当它检测到一个命令被传递给 shell 到进程时,它会停止这个并将它传递给 busybox 吗?在 shell 处理它之前以某种方式从 stdin 读取?

编辑 2

所以我想像这样将命令重定向到 busybox:

busybox <<EOF
echo "hai";
EOF

这可以用在什么地方吗?

更新

我已经开始使用 busyboxes ash shell,它可以做我想做的一切。显然,在将命令传递给 shell.

之前,无法拦截命令

使用 shell 的 built-in 'alias' (Alias Substitution, Shell Command Language, IEEE Standard 1003.1 (2013) ) 方法。 例如:

alias vi="busybox vi"
vi readme.txt

会将单词 'vi' 替换为 'busybox vi',然后 shell 将处理

busybox vi readme.txt

因为它是一个简单的替换,所以所有参数都被保留并传递给被替换的命令。

您还可以将默认参数添加到替换中,如下所示:

alias fbset="busybox fbset -fb /dev/graphics/fb0"

之后不再需要指定帧缓冲区 - 它已为您添加。通常程序会将最后指定的参数作为活动参数,因此如果您确实需要指定另一个帧缓冲区(在上面的示例中),它将忽略别名中提供的那个。