「adbシェル」が/etc/profileまたは他の設定ファイルを読み取るようにする方法は?

「adbシェル」が/etc/profileまたは他の設定ファイルを読み取るようにする方法は?

ashfrombusyboxを使用する組み込みLinuxシステム(kernel-5.10.24)を開発しています/bin/sh。システムはadb shellシリアルコンソールとPCからのログインをサポートします。

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
/

起動されたシェルはターゲットLinuxで起動されadb shellます。それでは、シェルを起動してその環境の他の設定ファイルを読み取るadbd方法はありますか?adb shell/etc/profile

答え1

あなたが望むことを達成するためにラッパースクリプトを試してみてください。

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

単純なエイリアスは次のとおりです。

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

答え2

多くの研究とテストの最後に、私の要求/回答を解決する方法を見つけたようです。

adbdまず、ターゲットLinuxでラッパースクリプトを呼び出すようにソースコードを変更します。ラッパースクリプトは、次のように少なくとも2つを呼び出します。/etc/init.d/adbshell_wrapper.sh

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

adb shellこのソリューションを使用すると、シリアルコンソールと同じ環境を実現できます。login

答え3

INVOCATION次の章で始まるman bash:

ログインシェルの引数の最初の文字は0または-オプションで始まります--login

したがって、起動するようにadbd設定するシェルを変更します(たとえば。argv[0]-bash

関連情報