특정 환경에서 실행될 때 스크립트 출력에 알 수 없는 후행 문자가 있습니다.

특정 환경에서 실행될 때 스크립트 출력에 알 수 없는 후행 문자가 있습니다.

저는 Java에서 Appium이라는 테스트 프레임워크를 사용해야 하는 프로젝트를 진행하고 있습니다. Appium 라이브러리는 NodeJS 설치 위치를 확인하기 위해 내 컴퓨터에서 다음 스크립트를 실행하려고 시도했습니다(상관없습니다. 노드임).

#!bin/sh
OUTPUT="$(npm root -g)"
echo "${OUTPUT}"
exit

이 스크립트는 Java JUnit 단위 테스트 중에 bash를 사용하여 명시적으로 실행됩니다. 바라보다이 링크Appium이 스크립트를 실행하는 데 사용하는 코드를 살펴보세요. 내 시스템의 셸에서(zsh, bash 또는 sh 사용) 이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

/home/me/node-v8.9.0-linux-x64/lib/node_modules

엄청난. 어떤 이유에서인지 내 IDE(IntelliJ)에서 설정한 환경에서 동일한 스크립트를 실행하면 출력은 다음과 같습니다.

/home/me/node-v8.9.0-linux-x64/lib/node_modules

[H[2J

이것이 Appium에 좋은 아이디어인지 아닌지에 관계없이 \r\r\n[H[2J저는 일반적으로 GnomeDO라는 프로그램을 통해 Ubuntu MATE에서 IntelliJ를 시작합니다. IntelliJ가 예상과 다르게 실행되는 것을 확인한 후 $PATHIntelliJ를 종료하고 셸에서 시작했습니다. 맞습니다 $PATH. 후행 출력이 중지됩니다.

Linux 데스크톱 환경에서 애플리케이션을 시작하는 것은 셸에서 애플리케이션을 실행하는 것과 어떻게 다르며 결과적으로 읽을 수 없는 문자가 발생합니까?

답변1

참고: 저는 댓글에서 이러한 아이디어와 매우 추측적인 결론을 포착하여 이론화해 왔습니다.

의심스러워 보이는 펑키한 캐릭터들이스케이프 시퀀스커서를 터미널 상단(왼쪽 상단?)으로 이동시킨 후 화면을 지웁니다. 셸에서 다음을 수행하여 실제로 이를 확인할 수 있습니다 echo -e '\e[H\e[2J'.

몇 가지 검색을 수행한 결과 이스케이프 시퀀스에 대한 지원이 불완전하고 문제의 시퀀스에 대해 [H표시되는 문자가 우리와 똑같이 보이는 Gnome 터미널에 대한 참조를 찾았습니다(예:)

이 두 가지 사실을 결합하면 다음과 같은 이론이 탄생합니다.

  1. Intellij는 창을 정리하기 위해 터미널 창을 열 때 \e[H\e[2J.
  2. Gnome DO는 일반적으로 사용하는 터미널과 다른 특정 터미널 유형을 가리키는 환경을 설정합니다.
  3. Intellij가 DO에서 시작되면 이 터미널을 시작하고 이스케이프 시퀀스를 발행한 다음 스크립트를 실행합니다.

아, 그런데 왜 스크립트 출력 뒤에 이스케이프 시퀀스가 ​​나타나는 걸까요? 이것이 반드시 그렇다는 뜻은 아니다.인쇄스크립트 출력을 인쇄한 후. Intellij는 다른 유효한 이스케이프 시퀀스를 내보낼 수 있으며 줄이 순서가 잘못된 것처럼 보이도록 커서를 이동할 수 있습니다.

이게 또극심한모든 사실이 포함되지 않은 추측일 뿐입니다... 하지만 echo시스템에서 위 명령을 처리하지 않는 Gnome 터미널을 찾을 수 있는지 확인하거나 제 추측을 확인해 보세요.

관련 정보