명령 대체가 포함된 환경 변수가 올바르게 설정되지 않았습니다.

명령 대체가 포함된 환경 변수가 올바르게 설정되지 않았습니다.

Windows 10 WSL(Ubuntu 20.04)을 사용하고 명령이 작동하도록 하려고 하는데 환경 변수를 설정하는 데 문제가 있습니다.

다음을 실행해야 합니다.

export ADB_SERVER_SOCKET=tcp:<variable ip here>:5037

이 경우 교체해야 하는 IP는 Windows에서 가져와야 하므로 제가 생각해낸 마지막 명령은 다음과 같습니다.

export ADB_SERVER_SOCKET=tcp:$(cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}'):5037

이 경우 cmd.exe명령은 다음을 인쇄합니다.

cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}'
192.168.0.11

그러나 변수가 무엇인지 실행한 후 확인하면 다음과 같은 결과를 얻습니다.

echo "$ADB_SERVER_SOCKET"
:503792.168.0.11

또한 전체 내용에 따옴표를 추가해 보았지만 결과는 항상 같은 것 같습니다. 어떤 이유에서든 tcp:1을 :5037로 대체한 것 같습니다.

어떻게 작동하게 할 수 있나요?

답변1

~처럼루딕댓글에서 올바르게 언급되었습니다.

... Windows 명령의 출력에는 후행(\r, 0x0D, ^M) 문자가 있어 줄이 뒤로 접혀서 pos 1에서 계속됩니다.

입력하다( CR) 그리고개행( LF) 타자기 시절: CR슬라이드(캐리지)를 시작 위치(맨 왼쪽)로 되돌리고 LF용지 롤을 다음 줄로 전진시킵니다.

Windows 줄 끝은 항상 CRLF이고 Unix 줄 끝은 입니다 LF.

추가 작업을 수행 CR하면 커서가 첫 번째 위치로 다시 이동하여 이전 위치를 덮어씁니다.

예를 들어 이를 제거하면 tr예상한 출력을 얻을 수 있습니다.

echo tcp:$(cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}' | tr -d $'\r'):5037

답변2

grep당신은 필요 하지도 명령 하지도 않습니다 tr. awk모든 것을 할 수 있습니다(Windows 시스템이 없기 때문에 테스트되지 않았습니다).

cmd.exe /C ipconfig | awk '/IPv4/ {sub(/\r$/, "", $14); print $14}'

관련 정보