동기 부여:나는 종종 Android 장치에서 원격 셸을 열고( adb
/Android 디버그 브리지 사용) 내 컴퓨터(안드로이드 장치가 여러 개 있으므로 Android 장치가 아님)에 스크립트를 작성하여 처음 셸에 연결할 때 도움을 주고 싶습니다.
예를 들어, 디렉토리를 특정 폴더로 변경하고 싶을 수도 있지만 코드가 실행되면 stdin이 즉시 닫히고 해당 행이 실제로 실행되는지 테스트하기 위해 echo "cd /storage/self/primary/Download; mkdir bobby" | adb shell
쉘도 즉시 닫힙니다. mkdir bobby
그것은.
예를 들어, 를 실행하면 셸이 5초 안에 자동으로 닫힙니다 echo "cd /storage/self/primary/Download; mkdir bobby; sleep 5" | adb shell
. 안타깝게도 heredoc 구분 기호가 발견되면 셸도 닫히기 때문에 heredoc는 도움이 되지 않습니다.
질문:명령을 파이프한 후 터미널에 stdin 연결을 유지하여 입력할 수 있도록 하려면 어떻게 해야 합니까? ssh
선택적 명령을 직접 전달할 수 있기 때문에 이는 어려운 일이 아닙니다.
이 질문이 이미 요청된 경우 사과드립니다. 표현 방법을 잘 모르겠습니다.
답변1
cat
파이프를 열린 상태로 유지하려면 파이프의 왼쪽에 다음을 추가하면 됩니다 .
{ echo "cd /storage/self/primary/Download; mkdir bobby"; cat; } | adb shell
프로세스 cat
는 이후에 실행되며 echo
표준 출력이 adb shell
명령에 연결되고 표준 입력은 터미널(입력할 수 있음)에서 읽습니다.
종료 되자마자 ( 인터럽트 또는 입력 종료 신호를 cat
눌러 ) 파이프라인이 종료됩니다.Ctrl+CCtrl+D
프롬프트와 명령줄 완성 또는 adb shell
명령이 일반적으로 제공하는 다른 대화형 기능이 포함된 완전한 대화형 셸을 제공하지 못할 수도 있지만 파이프의 오른쪽으로 명령을 보낼 수 있습니다.
에 설명된 내용과 비슷합니다."파이프를 열어 둔다"는 것은 무엇을 의미합니까?