ash
from busybox
을 사용하는 임베디드 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에서 래퍼 스크립트를 호출하도록 소스 코드를 변경합니다 . 래퍼 스크립트는 다음과 같이 최소한 두 가지를 호출합니다./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