2017-10-29 1 views
1

내 컴퓨터의 셸에서 adb shell cmd package list packages을 실행하고 설치된 모든 패키지의 목록을 가져올 수 있습니다. 터미널 에뮬레이터 (현재는 Termux를 사용)에서 안드로이드 전화 (Nexus 6P)에서 로컬로 비슷한 명령을 실행하고 싶습니다.Android 디바이스에서 로컬로 터미널 에뮬레이터에서 "adb 쉘"명령을 어떻게 실행합니까?

/system/bin/sh으로 동일한 쉘을 열고 /system/bin/cmd package list packages을 실행하면 아무 일도 일어나지 않습니다 (오류가 없으며 아무 것도 출력하지 않고 프롬프트를 다시로드합니다).

/system/bin/cmd -l을 실행하면 예상대로 옵션 목록이 나타납니다. $PATH$LD_LIBRARY_PATH은 두 환경에서 동일합니다. 하나의 큰 차이점은 echo $USERadb shell에서 "shell"을 반환하지만 내 로컬 사용자 이름은 Termux에서 시작한 /system/bin/sh에서 반환한다는 점입니다.

Android의 로컬 터미널 에뮬레이터에서 adb shell에서 실행되는 명령의 동작을 복제 할 수있는 방법이 있습니까?

편집 : 내 장치는 루팅되어 있으며 루트 전용 솔루션으로 정상입니다.

+0

당신이 참조 할 수 있습니다 그것의 자신의 sush 쉘보다는 시스템 쉘을 사용하도록 지시 적절한 SELinux에 컨텍스트를 설정로 로그인 tructs –

+0

링크를 제공해 주셔서 감사합니다. 그러나, 나는 링크가 실제로 내가 원한 것의 반대를 시도하고 있다고 생각한다 : adb로부터 termux의 행동을 모방해라. 실제로 디바이스에서 로컬로 실행되는 쉘에서'adb shell'에서 실행되는 명령의 동작을 에뮬레이트하고 싶습니다. 내 혼란은 같은 장치에서 같은 셸 바이너리를 사용하고 다른 출력을 얻는 동일한 바이너리를 실행하고 있다는 것입니다 (기술적으로 로컬에서 실행할 때 출력이 없음). – rjdang

답변

0

내가 편리 뿌리 누가 장치가없는,하지만 다음과 같은 일이 (당신이 SuperSU를 사용하는 가정) adb shell에 가까운만큼 근사 될 수있다 :

env -i USER=shell "$(which su)" shell --context u:r:shell:s0 --shell /system/bin/sh --command COMMAND 

는 I (매우 간단)를 테스트 Termux에서 뿌리 째 마시멜로 장치로. -i 플래그가

  • USER=shell가 특별히 필요하지 않은 빈 환경을 시작하는 데 사용됩니다

    • 하지만, 어떤 이유로 Termux 사용 env의 버전은 설정 할 필요

      정교하려면 최소한 하나의 변수

    • $(which su)은 장치의 su 바이너리의 전체 경로를 가리키며 원하는 경우 하드 코드 할 수 있습니다.
    • shell ins su 진 쉘 사용자 (adb shell와 같은)
    • --context u:r:shell:s0
    • --shell /system/bin/sh은 SuperSU는
  • +0

    자세한 답변을 보내 주셔서 감사합니다. 나는이 세팅들/명령들에 대해 몰랐다. 나는 Magisk를 root 용으로 사용하고 있지만, root는 올바르게 작동하고있는 것으로 보인다. 불행하게도,이 명령은 적어도 "cmd"명령에 대해 동일한 결과를 제공합니다. 그냥 아무것도 반환하지 않습니다. Nougat을 실행하는 Nexus 5x에서 장치가 아니며 동일한 결과를 얻으려고했는데 결과는'adb shell'에서 작동합니다. Termux의 명령은 null입니다. 누갓에서 도입 된 변화일까요? – rjdang

    관련 문제