2012-05-25 1 views
2

나는 최근에 PHP CLI의 매혹적인 세계에 들어갔다.PHP에서 작동하지 않는 화살표 키 CLI 스크립트 | 편집 : STDIN 관련된

우분투 터미널에서 스크립트를 실행하고 커서를 이동하는 대신 화살표 키를 누르면 이스케이프 코드^[[A^[[B^[[C^[[D. 내가 정상 터미널을 사용하는 경우

문제가 나타나지 않습니다. 그래서 내 스크립트에 뭔가 정상적인 동작을 방지 같아요.

사람은 어떤 솔루션이 있습니까?

도움 주셔서 감사합니다.

편집 : 그것은 내가 입력 문제를 잡기 위해 사용 STDIN을,처럼

가 보이는! STDIN 입력을 기다릴 때, 터미널은 잘못된 문자를 보여줍니다 !! 어떻게 해결할 수 있습니까?

+0

당신은 우리에게 몇 가지 코드를 바랍니다 보여줄 수 있을까요? [readline] (http://www.php.net/manual/en/book.readline.php)은 아직 사용하지 않고 있다면 도움이 될 것입니다. – Viktor

+0

Uhm, 코드 문제가 아닙니다. 화살표 키를 누르면 커서가 이동하는 대신에 [[A^[[B^[[D^[[C] – Bakaburg

+1

다른 구현은 분명히 적어도 나를 위해 다른 행동을 초래합니다. 예를 들어,'fgets (STDIN)'또는'fread (STDIN, 100)'을 사용하면 나는 당신과 같은 이스케이프 문자를 얻게되는 반면 GNU readline을 사용하는'readline()'을 사용하면 왼쪽과 오른쪽 화살표 키가 라인 편집을 허용합니다 (Windows PuTTY SSH 터미널을 통해 리눅스 박스에서). 'fgets' 또는'fread'로 라인 편집이 가능한지 확실하지 않으므로'readline'을 사용하는 것으로 의심됩니다. [Ncurses] (http://php.net/manual/en/book.ncurses.php)도 또 다른 가능성이 있습니다. 하지만 나는 코드를 보지 않고도 (많은) 도움을 줄 수는 없다. – Viktor

답변

1

나는 적어도 리눅스 환경에서 사용할 수있는 readline() 기능으로 fgets(STDIN) 전화를 교체하는 것이 좋습니다. readline 라이브러리는 별도로 설치할 수 있지만 OS X에는 포함되어 있지 않습니다.

// $input = fgets(STDIN); 
$input = readline('Input: '); 

스크립트에서 당신이 행 편집이 잉여 '- 문자 드래그에서 제거하고 파일 경로를 삭제해야 할 유일한 이유는, 당신은 항상 문자열에서 여분의 문자를 트리밍 할 수 있습니다.

$input = readline('Input: '); 
$input = trim($input, '´'); 
+1

는 그리고 당신이 이동 커서 키를 사용할 수 있기 때문에 **보다 사용자 친화적 인, 등 – ThiefMaster

+0

그래서 유일한 방법은 작성한 Readline을 설치하기 위해 역사 한 많은 **입니까? 전체 PHP를 다시 컴파일 할 필요없이 설치 방법을 찾아 보겠습니다. 어떤 제안? – Bakaburg

+1

@Bakaburg : MacPorts를를 사용하여 OS X의 설치 방법에서 작업 readline''얻을 수있는 정말 쉬운 방법 [여기] (이 있는지 확실하지 http://blog.jerodsanto.net/2009/06/php5-with-readline- support-on-os-x /). MacPorts가 설치되어 있지 않으면 [here] (http://www.macports.org/install.php)를 먼저 실행하십시오. MacPorts는 Apple의 Xcode Developer Tools를 필요로합니다 ... – Viktor

관련 문제