如何使“adb shell”读取/etc/profile或其他配置文件?

如何使“adb shell”读取/etc/profile或其他配置文件?

我正在开发一个嵌入式 Linux 系统(kernel-5.10.24),它使用ashfrom busyboxas /bin/sh。系统支持从串口控制台和adb shellPC机登录。

现在我发现shell从串行控制台启动确实读取了中定义的环境/etc/profile,但shell启动的adb shell却没有。

例如,/etc/profile如下所示,

# cat /etc/profile
export PATH="/bin:/sbin:/usr/bin:/usr/sbin"

if [ "$PS1" ]; then
        if [ "`id -u`" -eq 0 ]; then
                export PS1='# '
        else
                export PS1='$ '
        fi
fi

在串行控制台中,

# echo $HOME
/root
# echo $ENV

# echo $PATH
/bin:/sbin:/usr/bin:/usr/sbin

但在adb shell

/sys/kernel/config/usb_gadget # echo $PATH
/sbin:/usr/sbin:/bin:/usr/bin
/sys/kernel/config/usb_gadget # echo $HOME
/

启动的 shelladb shelladbd在目标 Linux 中启动的,那么有没有办法让 shell 启动来adb shell读取/etc/profile其环境的其他配置文件?

答案1

您可以尝试使用包装脚本来实现您所要求的:

adb shell 'ENV=/etc/profile sh -i'

一个简单的别名可以是:

alias adbshellenv="adb shell 'ENV=/etc/profile sh -i'"

答案2

经过大量的研究和测试,我想我找到了一种方法来解决我的请求/答案。

首先,更改源代码以调用目标Linux中adbd的包装器脚本。 包装器脚本至少调用 2 个东西,如下所示:/etc/init.d/adbshell_wrapper.sh

#!/bin/sh
/etc/profile
/bin/sh

通过此解决方案,可以获得与串行控制台adb shell相同的环境。login

答案3

INVOCATION从章节开始man bash

登录 shell 的参数零的第一个字符是-,或者以选项开头--login

因此,只需更改adbd以设置argv[0]它开始的外壳,例如-bash

相关内容