"adb 쉘"이 /etc/profile 또는 기타 구성 파일을 읽도록 만드는 방법은 무엇입니까?

"adb 쉘"이 /etc/profile 또는 기타 구성 파일을 읽도록 만드는 방법은 무엇입니까?

ashfrom busybox을 사용하는 임베디드 Linux 시스템(kernel-5.10.24)을 개발 중입니다 /bin/sh. 시스템은 adb shell직렬 콘솔과 PC에서의 로그인을 지원합니다.

shell이제 직렬 콘솔에서 시작하면 에 정의된 환경을 읽지 /etc/profileshell직렬 콘솔에서 시작하면 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

관련 정보