ash
frombusybox
を使用する組み込み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